赞
踩
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>5.2.13.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.13.RELEASE</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.0.7.Final</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.13.RELEASE</version> </dependency> </dependencies>
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 引入db.properties --> <context:property-placeholder location="classpath:db.properties"/> <!-- 创建druid 的数据源 --> <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource"> <property name="url" value="${jdbc.url}"/> <property name="driverClassName" value="${jdbc.driver}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 配置Hibernate的SessionFactory对象 --> <bean class="org.springframework.orm.hibernate5.LocalSessionFactoryBean" id="sessionFactory"> <!--关联数据源--> <property name="dataSource" ref="dataSource"/> <!-- 配置Hibernate的属性信息 --> <property name="hibernateProperties"> <props> <prop key="show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <!--扫描路径--> <property name="packagesToScan"> <list> <value>com.biao.pojo</value> </list> </property> </bean> <!-- 配置HibernateTemplate对象 --> <bean class="org.springframework.orm.hibernate5.HibernateTemplate" id="hibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 配置事务管理 --> <bean class="org.springframework.orm.hibernate5.HibernateTransactionManager" id="transactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 配置开启事务注解 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 配置扫描路径 --> <context:component-scan base-package="com.biao"/> </beans>
和表结构中的t_user表对应即可
package com.biao.pojo; import javax.persistence.*; import java.io.Serializable; @Entity @Table(name = "t_user") public class Users implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_id") private Integer userId; @Column(name = "user_name") private String userName; @Column(name = "real_name") private String realName; 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 String getRealName() { return realName; } public void setRealName(String realName) { this.realName = realName; } }
package com.biao.dao.impl; import com.biao.dao.IUserDao; import com.biao.pojo.Users; import com.sun.tools.internal.xjc.reader.xmlschema.bindinfo.BIConversion; 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; @Repository public class UserDaoImpl implements IUserDao { @Autowired private HibernateTemplate template; public void insertUsers(Users users) { this.template.save(users); } public void updateUsers(Users users) { this.template.update(users); } public void deleteUsers(Users users) { this.template.delete(users); } public Users selectUsersById(Integer userId) { return this.template.get(Users.class,userId); } public List<Users> selectUsersByName(String userName) { // 我们要执行特殊的查询操作 我们需要获取对应的Session对象 Session session = this.template.getSessionFactory().getCurrentSession(); // 通过Session对象创建Query对象 HQL 语句 Query query = session.createQuery(" from Users where userName = :abc"); Query queryTemp = query.setString("abc", userName); return queryTemp.list(); } public List<Users> selectUsersByNameUseSQL(String userName) { // 我们要执行特殊的查询操作 我们需要获取对应的Session对象 Session session = this.template.getSessionFactory().getCurrentSession(); // 通过Session对象创建Query对象 SQL 语句 Query query = session.createSQLQuery("select * from t_user where user_name = ?") .addEntity(Users.class) .setString(0, userName); return query.list(); } public List<Users> selectUsersByNameUseCriteria(String userName) { Session session = this.template.getSessionFactory().getCurrentSession(); Criteria criteria = session.createCriteria(BIConversion.User.class); criteria.add(Restrictions.eq("userName",userName)); return criteria.list(); } }
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class Test1 { @Autowired private IUserDao dao; @Test @Transactional // 操作失败是否回滚 @Rollback(false) public void testInsertUser(){ Users user = new Users(); user.setUserName("Tom"); user.setRealName("张三丰"); dao.insertUsers(user); } }
@Test
@Transactional
public void testQuery1(){
Users users = this.dao.selectUsersById(22);
System.out.println(users);
}
@Test
@Transactional
public void testQuery2(){
List<Users> list = this.dao.selectUsersByName("Tom");
for (Users u :
list) {
System.out.println(u);
}
}
ORM(Object Relational Mapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。简单理解为一种框架的格式。
现如今的ORM框架还是有比较多的,比如:Hibernate,TopLink以及OpenJPA等等,为了简化ORM框架的使用,JPA随之产生。
JPA是Java Persistent API的简称,中文名Java持久层API,由Sun公司提供了一对对于持久层操作的标准(接口+文档),说白了就是在各种ORM框架上封装了一套API实现统一操作。同时又依赖各种ORM框架去实现。
创建一个普通的Maven项目
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>5.2.13.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.13.RELEASE</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.0.7.Final</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.13.RELEASE</version> </dependency> </dependencies>
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/logistics?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 引入db.properties --> <context:property-placeholder location="classpath:db.properties"/> <!-- 创建druid 的数据源 --> <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource"> <property name="url" value="${jdbc.url}"/> <property name="driverClassName" value="${jdbc.driver}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 配置Hibernate的SessionFactory对象 --> <bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="sessionFactory"> <!--关联数据源--> <property name="dataSource" ref="dataSource"/> <!-- 配置Hibernate的属性信息 --> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="database" value="MYSQL"/> <property name="generateDdl" value="true"/> <property name="showSql" value="true"/> </bean> <!-- <props>--> <!-- <prop key="show_sql">true</prop>--> <!-- <prop key="hibernate.hbm2ddl.auto">update</prop>--> <!-- </props>--> </property> <!--扫描路径--> <property name="packagesToScan"> <list> <value>com.biao.pojo</value> </list> </property> </bean> <!-- 配置事务管理 --> <bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager"> <property name="entityManagerFactory" ref="sessionFactory"/> </bean> <!-- 配置开启事务注解 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 配置扫描路径 --> <context:component-scan base-package="com.biao"/> </beans>
package com.biao.pojo; import javax.persistence.*; import java.io.Serializable; @Entity @Table(name = "t_user") public class Users implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_id") private Integer userId; @Column(name = "user_name") private String userName; @Column(name = "real_name") private String realName; 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 String getRealName() { return realName; } public void setRealName(String realName) { this.realName = realName; } @Override public String toString() { return "Users{" + "userId=" + userId + ", userName='" + userName + '\'' + ", realName='" + realName + '\'' + '}'; } }
package com.biao.dao; import com.biao.pojo.Users; import java.util.List; public interface IUserDao { void insertUsers(Users users); void updateUsers(Users users); void deleteUsers(Users users); Users selectUsersById(Integer userId); List<Users> selectUsersByName(String userName); List<Users> selectUsersByNameUseSQL(String userName); List<Users> selectUsersByNameUseCriteria(String userName); }
package com.biao.dao.impl; import com.biao.dao.IUserDao; import com.biao.pojo.Users; import org.springframework.stereotype.Repository; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import java.util.List; @Repository public class UserDaoImpl implements IUserDao { @PersistenceContext(name = "entityManagerFactory") private EntityManager manager; public void insertUsers(Users users) { manager.persist(users); } public void updateUsers(Users users) { manager.merge(users); } public void deleteUsers(Users users) { users = this.selectUsersById(users.getUserId()); manager.refresh(users); } public Users selectUsersById(Integer userId) { return manager.find(Users.class,userId); } public List<Users> selectUsersByName(String userName) { return manager.createQuery(" from Users where userName = :abc") .setParameter("abc",userName) .getResultList(); } public List<Users> selectUsersByNameUseSQL(String userName) { return manager.createQuery("select * from t_user where user_name = ?",Users.class) .setParameter(1,userName) .getResultList(); } public List<Users> selectUsersByNameUseCriteria(String userName) { CriteriaBuilder builder = manager.getCriteriaBuilder(); CriteriaQuery<Users> query = builder.createQuery(Users.class); Root<Users> root = query.from(Users.class); Predicate cate = builder.equal(root.get("userName"), userName); query.where(cate); TypedQuery<Users> typedQuery = manager.createQuery(query); return typedQuery.getResultList(); } }
package com.biao.test; import com.biao.dao.IUserDao; import com.biao.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; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class Test1 { @Autowired private IUserDao dao; @Test @Transactional // 操作失败是否回滚 @Rollback(false) public void testInsertUser(){ Users user = new Users(); user.setUserName("Tom"); user.setRealName("张三丰"); dao.insertUsers(user); } @Test @Transactional public void testQuery1(){ Users users = this.dao.selectUsersById(22); System.out.println(users); } @Test @Transactional public void testQuery2(){ List<Users> list = this.dao.selectUsersByName("Tom"); for (Users u : list) { System.out.println(u); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。