• Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)(使用Annotation注解)(Junit测试类)


    1. 在IntelliJ中新建maven项目

    给出一个建好的示例

    捕获2

    2. 在pom.xml中配置依赖

    包括:
    spring-context
    spring-orm
    hibernate-core
    mysql
    commons-dbcp

    3. resources右键new一个Xml Configuration File--Spring Config配置文件:spring-config.xml(或者applicationContext.xml)

        配置dataSource、sessionFactory及transactionManager。

        可能会提示一个Application Context的什么配置,按提示操作即可;或者在IntelliJ工具的Project Structure下的Facets中进行spring的配置。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
           <!--自动扫描指定包及其子包下的所有Bean类-->
           <context:component-scan base-package="com.test.app.dao.impl"/>
    
           <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
                  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
                  <property name="url" value="jdbc:mysql://localhost:3306/javaee"/>
                  <property name="username" value="root"/>
                  <property name="password" value="root"/>
           </bean>
           
           <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
                  <property name="dataSource" ref="dataSource"/>
                  <property name="annotatedClasses">
                         <list>
                                <value>com.test.app.domain.User</value>
                         </list>
                  </property>
                  <property name="hibernateProperties">
                         <value>
                                hibernate.dialect=org.hibernate.dialect.MySQLDialect
                                hibernate.hbm2ddl.auto=update
                                hibernate.show_sql=true
                                <!--hibernate.format_sql=true-->
                         </value>
                  </property>
           </bean>
    
           <!--配置hibernate事务管理器-->
           <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
                  <property name="sessionFactory" ref="sessionFactory"/>
           </bean>
           <!--根据Annotation来生成事务代理-->
           <tx:annotation-driven transaction-manager="transactionManager"/>
    </beans>

    4. 新建User实体类,并进行Annotation注解

    @Entity    //把当前bean设置成实体对象
    @Table(name = "user")    //设置数据库的表名,默认为类名首字母小写
    public class User {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)   //id生成策略:自增
        @Column(name = "user_id")
        private int id;
        @Column
        private String name;
        @Column
        private int age;
    //省略setter和getter方法
    }

    5. 新建UserDao接口及其实现类UserDaoImpl,并进行Annotation注解

    public interface UserDao {
        Integer insert(User user);
        void delete(User user);
        void update(User user);
        User find(int id);
    }

    UserDaoImpl实现类代码如下:

    //指定该类作为Spring Bean,实例名为userDao。默认为Bean类的首字母小写
    @Repository("userDao")  //标注一个DAO组建类
    @Transactional 
    public class UserDaoImpl implements UserDao {
        @Autowired    //自动装配  或者用@Resource(name = "sessionFactory")配置依赖
        private SessionFactory sessionFactory;
    
        @Override
        public Integer insert(User user) {
            return (Integer) sessionFactory.getCurrentSession().save(user);
        }
    
        @Override
        public void delete(User user) {
            sessionFactory.getCurrentSession().delete(user);
        }
    
        @Override
        public void update(User user) {
            sessionFactory.getCurrentSession().update(user);
        }
    
        @Override
        public User find(int id) {
            return (User) sessionFactory.getCurrentSession().get(User.class, id);
        }
    }

    使用@Repository注解需要在Spring的配置文件中指定搜索路径,如下:

    <context:component-scan base-package="com.test.app.dao.impl"/>

    使用@Transactional注解需要在Spring配置文件中增加如下配置片段

    <!--配置hibernate事务管理器-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
           <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!--根据Annotation来生成事务代理-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    6. 新建测试类MainTest

    public class MainTest {
        public static void main(String[] args) {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
            UserDao userDao = (UserDao) applicationContext.getBean("userDao");
    
            User user = new User();
            user.setName("zhangsan");
            user.setAge(23);
    
            userDao.insert(user);
        }
    }

    在此,推荐使用junit测试类进行测试,下面进行简要介绍

    1. 添加依赖

    在pom.xml中添加junit和spring-test依赖,如下:

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.2.3.RELEASE</version>
    </dependency>

    2. 创建测试类

    UserDaoImpl——Alt+Enter——Create Test,将自动新建一个UserDapImplTest测试类

    3. 配置测试类

    在类名上方添加如下内容,用于配置Spring配置文件的位置

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:spring-config.xml")

    4. 执行测试类

    类名:右键——Run,执行所有方法

    方法名:右键——Run,执行当前方法

    5. 示例代码

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:spring-config.xml")
    public class UserDaoImplTest {
        @Resource
        private UserDao userDao;
    
        @Test
        public void testInsert() throws Exception {
            //省略...
        }
    
        @Test
        public void testDelete() throws Exception {     
            //省略...
        }
    
        @Test
        public void testUpdate() throws Exception {
            User user = userDao.find(2);
            user.setAge(20);
            userDao.update(user);
        }
    
        @Test
        public void testFind() throws Exception {
            User user = userDao.find(2);
            System.out.println(user.getName());
        }
    }
  • 相关阅读:
    java Set(集合)
    java Stack(栈)
    java LinkedList(链表)
    简单的maven配置
    Linux下如何查找.sh后缀的文件
    linux 下shell中if的“-e,-d,-f”是什么意思
    linux重定向
    shell中$0,$?,$!等的特殊用法
    向shell脚本中传入参数
    mysql索引
  • 原文地址:https://www.cnblogs.com/weilunhui/p/5007679.html
Copyright © 2020-2023  润新知