springdata笔记

applicationContext.xmljava

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd

       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd

       http://www.springframework.org/schema/data/jpa
       http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"
>

    <!--
    数据源 数据库链接池

    建立 entityManagerFactory这件事 叫spring去作

    事务

    spring-data-jpa 相关配置

-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">


        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql:///springdata"/>
        <property name="user" value="root"/>
        <property name="password" value="root"/>

    </bean>
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <!--告诉框架  实体类所在包-->
        <property name="packagesToScan" value="com.itcast.pojo"></property>
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                
                <!--
            Vendor 产商 提供者 实现者的意思 Adapter 适配器
        -->

                <property name="database" value="MYSQL"/>
                <!--<property name="databasePlatform" value=""/>-->
                <!--<property name="generateDdl" value=""/>
                <property name="showSql" value=""/>-->

            </bean>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.show_sql" >true</prop>
                <prop key="hibernate.format_sql" >true</prop>
                <prop key="hibernate.hbm2ddl.auto" >update</prop>
            </props>
        </property>
    </bean>

    <!--事务管理器-->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">

        <property name="dataSource" ref="dataSource"/>
    </bean>
    <tx:annotation-driven></tx:annotation-driven>
    <bean id="xx" class="com.itcast.demo.MyBean"></bean>

    <!--dao-->
    <jpa:repositories
            base-package="com.itcast.dao"
            entity-manager-factory-ref="entityManagerFactory"
            transaction-manager-ref="transactionManager"
    ></jpa:repositories>
</beans>

dao接口mysql

package com.itcast.dao;

import com.itcast.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

public interface UserDao extends JpaRepository<User,Integer>,JpaSpecificationExecutor<User> {
}

实现spring

package com.itheima;

import static org.junit.Assert.assertTrue;

import com.itheima.dao.UserDao;
import com.itheima.domain.User;
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.Optional;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:beans.xml")
public class AppTest {
    @Autowired
    private UserDao userDao;

    @Test
    @Transactional
    public void testSave() {
        User user = new User("小明", "111", 18);

        userDao.save(user);
    }
    @Test
    @Transactional
    @Rollback(false)
    public void testUpdate() {
        User user = new User("小明的爸爸", "111123", 28);
        user.setId(1);

        userDao.save(user);
    }
    @Test
    @Transactional
    public void testFindOne1() {
        //Optional 是jdk1.8 之后 额外增长的一个类

        //增长这个类目的是为了防止空指针的
        //jdk设计人员想  强制你考虑空指针问题
        Optional<User> optional = userDao.findById(1);

        /*if (optional.isPresent()){
            User user = optional.get();
            //可是官方说 这么用 落入下风  鼓励这个


        }*/
        //鼓励 orElse 传入参数备选项
        User user = optional.orElse(new User());


        System.out.println(user);

    }
    //懒加载
    @Test
    @Transactional
    public void testFindOne2() {
        User user = userDao.getOne(1);
        System.out.println(user.getUsername());
    }
    @Test
    @Transactional
    @Rollback(false)
    public void testRemove() {

        User user = userDao.findById(1).get();

        userDao.delete(user);
    }
    @Test
    @Transactional
    @Rollback(false)
    public void testFindByUsername() {

        User user = userDao.findByUsername("xiaohei");
        System.out.println(user);
    }
    @Test
    @Transactional
    @Rollback(false)
    public void testFindByUsernameAndPassword() {

        User user = userDao.findByUsernameAndPassword("xiaolv","11");
        System.out.println(user);
    }
    @Test
    @Transactional
    @Rollback(false)
    public void testFindByAgeAndPassword() {

        User user = userDao.findByAgeAndPassword(11,"123");
        System.out.println(user);
    }
    @Test
    @Transactional
    @Rollback(false)
    public void testDeleteByUsername() {
        userDao.deleteByUsername("xiaolv");
    }
    @Test
    @Transactional
    @Rollback(false)
    public void testDeleteByUsername2() {
        userDao.deleteByUsername("xiaohu");
    }
}

 

 

 

 

注解:
@Entity//这是个实体类
@Id主键
@Column
@Transactional事物
@Rollback(false)回滚关闭sql

Bean工厂:数据库


注入的
UserDao接口继承JpaRepository<User,Integer>
JpaSpecificationExecutor<User>
在xml中配置了包扫描()
FactoryBean 建立工厂的bean
工厂建立好以后会直接调用afterPropertiesSet方法实现实例化~app

repository就是Dao!框架


ProxyFactory动态代理工厂
动态代理生成对象后走invokedom


UserDao中加入
@query("")语句
"from User where username=?1"spa

"from User where username=?1andpassword=?2"hibernate


"from User where username=:a"
java被编译后 参数名会消失 因此:
@Param("a") 声明占位符 JVM不能改


"delete from User where username=?1"
@Modifying请支持删除操做

原生"delete from user where username=? ,后面加声明nativeQuery = true"


特殊的物种:
find By Username
以查询为例 以如下名命名规则的
find|read|query|get|stream+By+属性名+[查询方式]
_>规则在PartTree/class文件中

查询方式:大于小于 模糊 等

删除
remove|delete

判断
Exist


计数
count

还有个没看清 and all


规则:关键字+By+[查询方式]+And|Or+属性名+[查询方式]......

.handeler .scanmerwww.jk1123.com/?p=124 老师的官网

相关文章
相关标签/搜索