Spring 整合 hibernate完成CRUD HQL SQL QBC测试

1.导入jar包
在这里插入图片描述
2.jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/xxx
jdbc.username=xxx
jdbc.password=xxx

3.applicationContext.xml

<?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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">

        <!--配置读取properties文件的工具类-->
        <context:property-placeholder location="classpath:jdbc.properties"/>
        <!--配置c3p0数据库连接池-->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driver}"></property>
            <property name="jdbcUrl" value="${jdbc.url}"></property>
            <property name="user" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>
        <!--配置Hibernate的SessionFatory-->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <!--hibernateProperties属性:配置与hibernate相关的内容,如显示sql语句,开启正向工程-->
            <property name="hibernateProperties">
                <props>
                    <!--显示当前执行的sql语句-->
                    <prop key="hibernate.show_sql">true</prop>
                    <!--开启正向工程-->
                    <prop key="hibernate.hbm2ddl.auto">update</prop>
                </props>
            </property>
            <!--扫描实体所在的包-->
            <property name="packagesToScan">
                <list>
                    <value>com.wj.pojo</value>
                </list>
            </property>
        </bean>

        <!--配置HibernateTemplate对象-->
        <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>

        <!--配置Hibernate的事务管理器-->
        <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>

        <!--配置开启注解事务处理-->
        <tx:annotation-driven transaction-manager="transactionManager"/>
        <!--配置springIOC的注解扫描-->
        <context:component-scan base-package="com.wj"/>

</beans>

4.UsersDao.java

package com.wj.dao;

import com.wj.pojo.Users;

import java.util.List;

/**
 * @Auther: wj
 * @Date: 2019/9/10
 * @Description: com.wj.mapper
 * @version: 1.0
 */
public interface UsersDao {
    /**
     * 增加
     * @param users
     */
    void insertUsers(Users users);

    /**
     * 更新
     * @param users
     */
    void updateUsers(Users users);

    /**
     * 删除
     * @param users
     */
    void deleteUsersById(Users users);

    /**
     * 查询
     * @param userid
     * @return
     */
    Users selectUsersById(Integer userid);

    /**
     * 通过姓名查询:HQL方法
     * @param username
     * @return
     */
    List<Users> selectUserByName(String username);

    /**
     * 通过姓名查询:SQL方法
     * @param username
     * @return
     */
    List<Users> selectUserByNameUseSQL(String username);

    /**
     * 通过姓名查询:QBC方法
     * @param username
     * @return
     */
    List<Users> selectUserByNameUseCritiria(String username);
}

5.UsersDaoImpl.java

package com.wj.dao.daoImpl;

import com.wj.dao.UsersDao;
import com.wj.pojo.Users;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @Auther: wj
 * @Date: 2019/9/10
 * @Description: com.wj.dao.daoImpl
 * @version: 1.0
 */

@Repository
public class UsersDaoImpl implements UsersDao{

    @Autowired
    private HibernateTemplate hibernateTemplate;

    @Override
    public void insertUsers(Users users) {
        this.hibernateTemplate.save(users);
    }

    @Override
    public void updateUsers(Users users) {
        this.hibernateTemplate.update(users);
    }

    @Override
    public void deleteUsersById(Users users) {
        this.hibernateTemplate.delete(users);
    }

    @Override
    public Users selectUsersById(Integer userid) {
        return this.hibernateTemplate.get(Users.class,userid);
    }

    @Override
    public List<Users> selectUserByName(String username) {
        //getCurrentSession:当前session必须要有事务边界,且只能处理唯一的一个事务。
        //                  当事务提交或者回滚后session自动失效
        //openSession:每次都会打开一个新的session。假如每次使用多次,
        //            获得的是不同的session对象,使用完毕后我们需要手动的调用close方法关闭session
        Session session = this.hibernateTemplate.getSessionFactory().getCurrentSession();
        // select * from t_users where username=?
        Query query=session.createQuery("from Users where username = :abc");
        Query queryTemp=query.setString("abc",username);
        return queryTemp.list();
    }

    @Override
    public List<Users> selectUserByNameUseSQL(String username) {
        Session  session=this.hibernateTemplate.getSessionFactory().getCurrentSession();
        Query query=session.createSQLQuery("select * from t_users where username = ?")
                .addEntity(Users.class).setString(0,username);
        return query.list();
    }

    @Override
    public List<Users> selectUserByNameUseCritiria(String username) {
        Session session=this.hibernateTemplate.getSessionFactory().getCurrentSession();
        // sql: select * from t_users where username= '张三'
        Criteria c =session.createCriteria(Users.class);//select * from t_users
        c.add(Restrictions.eq("username",username));
        return c.list();
    }
}

6.Users.java

package com.wj.pojo;

import javax.persistence.*;
import java.io.Serializable;

/**
 * @Auther: wj
 * @Date: 2019/9/10
 * @Description: com.wj.pojo
 * @version: 1.0
 */
@Entity
@Table(name = "t_users")
public class Users implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)//自增
    @Column(name = "userid")
    private Integer userid;
    @Column(name = "username")
    private String username;
    @Column(name = "userage")
    private Integer userage;

    public Integer getUserid() {
        return userid;
    }

    public void setUserid(Integer userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getUserage() {
        return userage;
    }

    public void setUserage(Integer userage) {
        this.userage = userage;
    }

    public Users() {
    }

    public Users(String username, Integer userage) {
        this.username = username;
        this.userage = userage;
    }

    @Override
    public String toString() {
        return "Users{" +
                "userid=" + userid +
                ", username='" + username + '\'' +
                ", userage=" + userage +
                '}';
    }
}

7.UsersDaoImplTest.java

package com.wj.test;

import com.wj.dao.UsersDao;
import com.wj.pojo.Users;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;


/**
 * @Auther: wj
 * @Date: 2019/9/10
 * @Description: com.wj.test
 * @version: 1.0
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class UsersDaoImplTest {
    @Autowired
    private UsersDao usersDao;

    /**
     * 添加用户
     */
    @Test
    @Transactional //在测试类中,事务提交方式,默认回滚
    @Rollback(false) //取消自动回滚
    public void testInsertUsers(){
        Users users=new Users();
        users.setUserage(20);
        users.setUsername("张三");
        this.usersDao.insertUsers(users);
    }

    /**
     * 更新用户
     */
    @Test
    @Transactional
    @Rollback(false)
    public void testUpdateUsers(){
        Users users=new Users();
        users.setUserid(2);
        users.setUserage(22);
        users.setUsername("李四");
        this.usersDao.updateUsers(users);
    }

    /**
     * 根据userid查询用户
     */
    @Test
    @Transactional
    @Rollback(false)
    public void testSeleteUsers(){
        Users users=this.usersDao.selectUsersById(2);
        System.out.println(users);
    }

    /**
     * 删除用户
     */
    @Test
    @Transactional
    @Rollback(false)
    public void testDeleteUsers(){
        Users users=new Users();
        users.setUserid(2);
        this.usersDao.deleteUsersById(users);
    }

    /**
     * HQL测试
     */
    @Test
    @Transactional
    public void testselectUserByName(){
        List<Users> list=this.usersDao.selectUserByName("张三");
        for (Users users:list) {
            System.out.println(users);
        }
    }

    /**
     * SQL测试
     */
    @Test
    @Transactional
    public void testselectUserByNameUseSQL(){
        List<Users> list=this.usersDao.selectUserByNameUseSQL("张三");
        for (Users users:list) {
            System.out.println(users);
        }
    }

    /**
     * QBC测试
     */
    @Test
    @Transactional
    public void testselectUserByNameUseCritiral(){
        List<Users> list=this.usersDao.selectUserByNameUseCritiria("张三");
        for (Users users:list) {
            System.out.println(users);
        }
    }
}


以上就完成了:
Spring 整合 hibernate完成CRUD HQL SQL QBC测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值