Spring-data JPA初次接触

版权声明:本文为博主原创文章,未经博主允许不得转载。 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和以前的一样

猜你喜欢

转载自blog.csdn.net/yhld456/article/details/72821286