版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yhld456/article/details/72821286
Spring-data JPA初次接触
spring-jpa.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:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:repository="http://www.springframework.org/schema/data/repository"
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-4.3.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.8.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.11.xsd">
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- 自动扫描包 -->
<context:component-scan base-package="cn.nb12.jpa.dao"></context:component-scan>
<context:component-scan base-package="cn.nb12.jpa.service"></context:component-scan>
<!-- 数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="minIdle" value="5" />
<property name="maxActive" value="10" />
<property name="initialSize" value="2" />
</bean>
<!-- 配置jpa 本地容器实体管理器工厂 packagesToScan 指定所有@Entity的实体类所在的包 -->
<bean id="emf"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 配置jpa实现的适配器 -->
<property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"></property>
<!-- 实体类对象扫描包 -->
<property name="packagesToScan" value="cn.nb12.jpa.po"></property>
<!-- 实现方的配置 -->
<property name="jpaProperties">
<props>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<!-- 配置jpa实现的适配器 -->
<bean id="hibernateJpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<!-- 显示sql -->
<property name="showSql" value="true" />
<!-- 方言 -->
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"></property>
</bean>
<!-- jpa的事务处理器 -->
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<!-- 实体管理器工厂 -->
<property name="entityManagerFactory" ref="emf" />
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置事务注解处理 -->
<tx:annotation-driven proxy-target-class="false"
transaction-manager="txManager" />
<!-- 配置spring data jpa 仓库(repository) -->
<jpa:repositories base-package="cn.nb12.jpa.dao"
entity-manager-factory-ref="emf" transaction-manager-ref="txManager" />
</beans>
User.java
package cn.nb12.jpa.po;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* 用户
*
* @ClassName User
* @Description TODO(这里用一句话描述这个类的作用)
* @author: yhld456 [email protected]
* @Date 2017年5月31日 上午10:12:37
* @version 1.0.0
*/
@Entity
@Table(name="user")
public class User implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Integer id;
private String username;
private String password;
private String nickname;
private String phone;
private String sex;
private java.util.Date createTime;
public User() {
super();
}
...
}
UserDao.java
package cn.nb12.jpa.dao;
import java.util.List;
import cn.nb12.jpa.po.User;
/**
* 用户dao
*
* @ClassName UserDao
* @Description TODO(这里用一句话描述这个类的作用)
* @author: yhld456 [email protected]
* @Date 2017年5月31日 上午10:18:59
* @version 1.0.0
*/
public interface UserDao {
/**
* 查找所有
*
* @Description (TODO这里用一句话描述这个方法的作用)
* @author: yhld456 [email protected]
* @Date 2017年5月31日 上午10:21:00
* @version 1.0.0
* @return
*/
List<User> findAll();
/**
* 添加
*
* @Description (TODO这里用一句话描述这个方法的作用)
* @author: yhld456 [email protected]
* @Date 2017年5月31日 上午10:21:06
* @version 1.0.0
* @param u
*/
void addUser(User u);
/**
* 更新
*
* @Description (TODO这里用一句话描述这个方法的作用)
* @author: yhld456 [email protected]
* @Date 2017年5月31日 上午10:21:10
* @version 1.0.0
* @param u
*/
void updateUser(User u);
/**
* 删除
*
* @Description (TODO这里用一句话描述这个方法的作用)
* @author: yhld456 [email protected]
* @Date 2017年5月31日 上午10:21:16
* @version 1.0.0
* @param id
*/
void deleteById(int id);
/**
* 根据id查
*
* @Description (TODO这里用一句话描述这个方法的作用)
* @author: yhld456 [email protected]
* @Date 2017年5月31日 下午2:26:46
* @version 1.0.0
* @param id
* @return
*/
User findById(int id);
/**
* 用户登录
*
* @Description (TODO这里用一句话描述这个方法的作用)
* @author: yhld456 [email protected]
* @Date 2017年5月31日 下午2:48:11
* @version 1.0.0
* @param uname
* @param pwd
* @return
*/
User login(String uname, String pwd);
}
UserDaoImpl.java
package cn.nb12.jpa.dao.impl;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import cn.nb12.jpa.dao.UserDao;
import cn.nb12.jpa.po.User;
/**
* 用户dao的实现
*
* @ClassName UserDaoImpl
* @Description TODO(这里用一句话描述这个类的作用)
* @author: yhld456 [email protected]
* @Date 2017年5月31日 上午10:19:59
* @version 1.0.0
*/
@Repository
public class UserDaoImpl implements UserDao {
/**
* 通过注解的方式拿到持久上下文的bean管理器(EntityManager)
*/
@PersistenceContext
private EntityManager em;
@Override
public List<User> findAll() {
// 通过jpql查
return em.createQuery("select u from User u", User.class).getResultList();
}
@Override
public void addUser(User u) {
em.persist(u);
}
@Override
public void updateUser(User u) {
em.merge(u);
}
@Override
public void deleteById(int id) {
int rows = em.createQuery("delete User u where u.id=:id").setParameter(1, id).executeUpdate();
if (rows > 0) {
System.out.println("删除成功");
}
}
@Override
public User findById(int id) {
return em.find(User.class, id);
}
@Override
public User login(String uname, String pwd) {
return em.createQuery("select u from User u where u.username=:username and u.password=:password",User.class)
.setParameter("username", uname)
.setParameter("password", pwd)
.getSingleResult();
}
}
service和controller和以前的一样