SpringData 第一章:简单开发和注解开发
来源:互联网 发布:知世故而不世故 出处 编辑:程序博客网 时间:2024/06/05 08:21
一、SpringData简介
二、开发第一个SpringData程序
1、创建一个普通maven,过程省略(不懂可见maven的文章)
2.修改pox.xml的文件内容
<!--Mysql 驱动包 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa --><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>1.11.6.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>5.2.9.Final</version></dependency>
3、定义全局文件SpringData.xml文件
<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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <context:component-scan base-package="com.mingde"/> <!--1、 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///springdata"/> <property name="username" value="root"/> <property name="password" value="123"/> </bean> <!-- 2、配置实体类管理工厂 --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> </property> <property name="packagesToScan" value="com.mingde"/> <property name="jpaProperties"> <props> <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> <!-- 3、配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <!-- 4.配置以注解的方式定义事务 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 5.配置jpa:repositories --> <jpa:repositories base-package="com.mingde" entity-manager-factory-ref="entityManagerFactory"/></beans>
4、实体类
package com.mingde.po;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entitypublic class Student {@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private int sid;private String sname;private String sex;private int age;private String addr;/*** get、set和toString 作者在此省略 **/}
5、dao层:自定义方法的命名规则
public interface StudentRepository extends Repository<Student, Integer> {//参数一:要映射的类,参数二:该表的主键的类型/** 这里只需写接口,不需要有实现类 **/
/*** 下面的方法名是按照下面的‘自定义方法的命名规则表’来命名的,不是随便乱命名的 ***/
//根据姓名查询学生信息List<Student> findBySname(String sname)throws Exception;//模糊查询List<Student> findBySnameLike(String sname)throws Exception;//查询性别和年龄大于多少岁的List<Student> findBySexAndAgeGreaterThan(String sex ,int age)throws Exception;//查询一某个字开头的(如某个地址是以‘上’开头的:上海)List<Student> findByAddrStartingWith(String saddr)throws Exception;//查询指定性别并且按年龄升序排序List<Student> findBySexOrderByAge(String sex)throws Exception;}
自定义方法的命名规则表:
6、测试类
import java.util.List;import org.junit.Before;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.mingde.dao.StudentRepository;import com.mingde.po.Student;import com.mingde.service.StudentService;public class Test {private ApplicationContext ac;private StudentRepository sr;@Beforepublic void setUp() throws Exception {ac=new ClassPathXmlApplicationContext("SpringData.xml");sr=ac.getBean(StudentRepository.class);}@org.junit.Testpublic void test() {System.out.println("开始了");}//查询叫‘张三’的所有学生@org.junit.Testpublic void test2() throws Exception {List<Student> findBySname = sr.findBySname("张三");System.out.println(findBySname);}//模糊查询姓名带‘张’的所有学生@org.junit.Testpublic void test3() throws Exception {List<Student> findBySname = sr.findBySnameLike("%张%");System.out.println(findBySname);}//查询所有男生并且年龄大于12岁的@org.junit.Testpublic void test4() throws Exception {List<Student> findBySname = sr.findBySexAndAgeGreaterThan("男",12);System.out.println(findBySname);}//查询地址中以‘上’开头的@org.junit.Testpublic void test5() throws Exception {List<Student> findBySname = sr.findByAddrStartingWith("上");System.out.println(findBySname);}//查询指定性别并且按年龄升序排序@org.junit.Testpublic void test6() throws Exception {List<Student> findBySname = sr.findBySexOrderByAge("男");System.out.println(findBySname);}}
三、利用注解@Query及@Modifying来进行开发
1.pom.xml和SpringData.xml和实体类同上
2.定义Dao层
package com.mingde.dao;import java.util.List;import org.springframework.data.jpa.repository.Modifying;import org.springframework.data.jpa.repository.Query;import org.springframework.data.repository.RepositoryDefinition;import org.springframework.data.repository.query.Param;import com.mingde.po.Student;//自主命名查询方法@RepositoryDefinition(domainClass=Student.class,idClass=Integer.class) //可以替代下面的extends。。public interface StudentRepository2 /*extends Repository<Student, Integer>*/{//查询所有@Query("select st from Student st") //这里不能写成select * from student,不能拥有*号public List<Student> findAll() throws Exception;//根据姓名进行模糊查询@Query("select st from Student st where st.sname like %?1%")public List<Student> findByWords(String words) throws Exception;//修改学生@Modifying//代表可以修改@Query("update Student st set st.sname=:sname,st.addr=:addr where st.sid=:sid")public void updateStudent(@Param("sname")String sname,@Param("addr")String addr,@Param("sid") int sid) throws Exception;}
3、定义Service层
package com.mingde.service;import javax.transaction.Transactional;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.mingde.dao.StudentRepository2;@Servicepublic class StudentService {@Autowired//在junit是不可以使用该注解的,因为spring无法扫描Junit的test文件private StudentRepository2 sr;@Transactionalpublic void updateStudent(String sname,String addr,int sid) throws Exception {sr.updateStudent(sname, addr, sid);}}
4、测试类
package com.mingde.test;import java.util.List;import org.junit.Before;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.mingde.dao.StudentRepository;import com.mingde.dao.StudentRepository2;import com.mingde.po.Student;import com.mingde.service.StudentService;public class Test {private ApplicationContext ac;private StudentRepository2 sr2;@Beforepublic void setUp() throws Exception {ac=new ClassPathXmlApplicationContext("SpringData.xml");sr2=ac.getBean(StudentRepository2.class);}/** 利用注解@Query及@Modifying **/@org.junit.Testpublic void test7() throws Exception {List<Student> findAll = sr2.findAll();System.out.println(findAll);}public static void main(String[] args) throws Exception {ApplicationContext ac2=new ClassPathXmlApplicationContext("SpringData.xml");StudentRepository2 sr2=ac2.getBean(StudentRepository2.class);StudentService ss=ac2.getBean(StudentService.class);/*//查询所有学生List<Student> findAll = sr2.findAll();System.out.println(findAll);//模糊查询学生List<Student> findByWords = sr2.findByWords("张");System.out.println(findByWords);*///修改学生信息ss.updateStudent("郑秋冬", "杭州", 1002);}}
注意:@Query和@Modifying不能进行添加(insert)操作
阅读全文
0 0
- SpringData 第一章:简单开发和注解开发
- SpringData开发步骤
- SpringBoot+SpringData整合开发
- 第一章 开发简单java应用程序
- 第一章 .Net 控件开发(WebForm) 开发简单自定义控件(9) 流程和生命周期
- Maven整合SpringMVC+Hibernate+SpringData框架开发
- 第一章 开发简单的java应用程序
- 第一章 .Net 控件开发(WebForm) 开发简单自定义控件
- PHP和MySQL开发—第一章
- 注解开发
- SpringData 第二章:继承PagingAndSortingRepository进行分页开发
- POI实战-java开发excel详解(第一章 简单写出)
- 简单springData学习笔记
- javascript网页开发 第一章
- Portlet开发指南第一章
- 第一章 软件开发概述
- 《portal开发指南》第一章
- 第一章 ios开发入门
- 第六章 带宽利用
- 一日精通python(三)
- 第七章 传输介质
- POJ-3190-Stall Reservations-优先队列+贪心
- C++11中的std::function
- SpringData 第一章:简单开发和注解开发
- 第十章 检错与纠错
- LeetCode 494. Target Sum
- MQ、Dubbo 区别以及使用场景
- 全选
- 面向对象
- 第十一章 数据链路控制
- mariadb的管理
- 第十二章 多路访问