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 老师的官网

    积少成多, 积沙成塔.
  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/lei0913/p/10960270.html
Copyright © 2011-2022 走看看