zoukankan      html  css  js  c++  java
  • springdata笔记

    applicationContext.xml

    <?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接口

    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> {
    }

    实现

    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)回滚关闭

    Bean工厂:


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

    repository就是Dao!


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


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

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


    "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 .scanmer
    www.jk1123.com/?p=124 老师的官网

    积少成多, 积沙成塔.
  • 相关阅读:
    对进程空间的认识
    自己实现智能指针
    实现一个string类
    常见问题总结
    pong game using ncurses
    知识梳理
    经典算法回顾
    自己实现more命令
    表的垂直拆分和水平拆分-zz
    MySQL索引原理及慢查询优化-zz
  • 原文地址:https://www.cnblogs.com/lei0913/p/10960270.html
Copyright © 2011-2022 走看看