hibernate非主键自增没用_spring 整合 Hibernate

本文介绍了如何在Spring整合Hibernate时处理非主键字段的自增问题,包括所需的Pojo类设置、相关jar包引入、applicationContext.xml配置、DAO接口及实现以及测试代码的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pojo

@Entity
@Table(name="t_users")
public class Users implements Serializable{
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)//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;
	}
	@Override
	public String toString() {
		return "Users [userid=" + userid + ", username=" + username + ", userage=" + userage + "]";
	}
}

需要导入架包

8c7b077ada977d3140e89e51f7e419a5.png

配置文件 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:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--加载属性配置文件-->
    <context:property-placeholder location="classpath:jdbc.properties" />

    <!--注册数据源-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver.class}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <!--注册Hibernate上下文对象-->
    <bean id="localSessionFactoryBean" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop> <!--显示SQL-->
                <prop key="hibernate.hbm2ddl.auto">update</prop> <!--开启正向工程-->
            </props>
        </property>
        <!--配置实体类的扫描-->
        <property name="packagesToScan" value="com.bjsxt" />
    </bean>

    <!--注册HibernateTemplate,操作数据库-->
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
        <property name="sessionFactory" ref="localSessionFactoryBean" />
    </bean>

    <!--注册Hibernate事务管理器-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="dataSource" ref="dataSource" />
        <property name="sessionFactory" ref="localSessionFactoryBean" />
    </bean>

    <!--配置事务注解-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    <!--注册组件扫描器-->
    <context:component-scan base-package="com.bjsxt" />

</beans>

UsersDao

package com.bjsxt.dao;

import com.bjsxt.pojo.Users;

public interface UsersDao {
        void insertUsers(Users users);
	void updateUsers(Users users);
	void deleteUSers(Users users);
	Users selectUsersById(Integer userid);

       //HQL查询:操作实体类对象
       //按条件查询
        List<Users> selectUsersByNameUseSQL(String username);

        //HQL查询:操作实体类对象
        //按条件查询
        List<Users> selectUsersByName(String username);

        //QBC查询
	List<Users> selectUsersByNameUseQBC(String username);
}

UsersDaoImpl

@Component
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 deleteUSers(Users users) {
		this.hibernateTemplate.delete(users);

	}

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

	}

       //SQL查询:操作的是数据库的表
       @Override
	public List<Users> selectUsersByNameUseSQL(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();
	}

        //HQL查询:操作的是实体类对象
        //按条件查询
        @Override
	public List<Users> selectUsersByName(String username) {
		//getCurrentSession:当前的session必须要有事务边界,且只能处理唯一的一个事务。当事务提交或者回滚后session自动失效。
		//openSession:每次都会打开一个新的session,使用完毕后需要手动调用colse方法关闭session。
		Session session=this.hibernateTemplate.getSessionFactory().getCurrentSession();
			//sql:select * from t_users where username = ? 
		Query query=session.createQuery("from Users where username =:abc");
		Query queryTemp=query.setString("abc", username);
		return queryTemp.list();
	}

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

}

测试代码

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class UsersDaoImplTest {
	
	@Autowired
	private UsersDao usersDao;
	/**
	 * 添加用户
	 */
	@Test
	@Transactional //在测试类对于事务提交方式默认的是回滚
	@Rollback(false)//取消自动回滚
	public void testInserUSers() {
		Users users=new Users();
		users.setUsername("张三");
		users.setUserage(19);
		this.usersDao.insertUsers(users);
	}
	/**
	 * 更新用户
	 */
	@Test
	@Transactional //在测试类对于事务提交方式默认的是回滚
	@Rollback(false)//取消自动回滚
	public void testUPdateUSers() {
		Users users=new Users();
		users.setUsername("张三");
		users.setUserid(2);
		users.setUserage(22);
		this.usersDao.updateUsers(users);
	}
	/**
	 * 查询用户
	 */
	@Test
	@Transactional //在测试类对于事务提交方式默认的是回滚
	@Rollback(false)//取消自动回滚
	public void testSelectUSers() {
		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.deleteUSers(users);
	}

        /**
	 * SQL 按条件查询
	 */
	@Test
	@Transactional //事务
	public void selectUsersByNameUseSQL(){
		List<Users> list=this.usersDao.selectUsersByName("张三");
		for (Users user : list) {
			System.out.println(user);
		}
	}

        /**
	 * HQL 按条件查询
	 */
	@Test
	@Transactional //事务
	public void selectUsersByName(){
		List<Users> list=this.usersDao.selectUsersByName("张三");
		for (Users user : list) {
			System.out.println(user);
		}
	}

        /**
	 * QBC 按条件查询
	 */
	@Test
	@Transactional //事务
	public void selectUsersByNameUseQBC(){
		List<Users> list=this.usersDao.selectUsersByName("张三");
		for (Users user : list) {
			System.out.println(user);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值