学习爱酷学习网尚硅谷springdata笔记:

1.在 Spring 配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:tx="http://www.springframework.org/schema/tx"
  6. xmlns:jpa="http://www.springframework.org/schema/data/jpa"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
  9. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
  10. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
  11.  
  12. <!-- 配置自动扫描的包 -->
  13. <context:component-scan base-package="com.atguigu.springdata"></context:component-scan>
  14.  
  15. <!-- 1. 配置数据源 -->
  16. <context:property-placeholder location="classpath:db.properties"/>
  17.  
  18. <bean id="dataSource"
  19. class="com.mchange.v2.c3p0.ComboPooledDataSource">
  20. <property name="user" value="${jdbc.user}"></property>
  21. <property name="password" value="${jdbc.password}"></property>
  22. <property name="driverClass" value="${jdbc.driverClass}"></property>
  23. <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
  24.  
  25. <!-- 配置其他属性 -->
  26. </bean>
  27.  
  28. <!-- 2. 配置 JPA 的 EntityManagerFactory -->
  29. <bean id="entityManagerFactory"
  30. class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  31. <property name="dataSource" ref="dataSource"></property>
  32. <property name="jpaVendorAdapter">
  33. <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
  34. </property>
  35. <property name="packagesToScan" value="com.atguigu.springdata"></property>
  36. <property name="jpaProperties">
  37. <props>
  38. <!-- 二级缓存相关 -->
  39. <!--
  40. <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
  41. <prop key="net.sf.ehcache.configurationResourceName">ehcache-hibernate.xml</prop>
  42. -->
  43. <!-- 生成的数据表的列的映射策略 -->
  44. <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
  45. <!-- hibernate 基本属性 -->
  46. <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
  47. <prop key="hibernate.show_sql">true</prop>
  48. <prop key="hibernate.format_sql">true</prop>
  49. <prop key="hibernate.hbm2ddl.auto">update</prop>
  50. </props>
  51. </property>
  52. </bean>
  53.  
  54. <!-- 3. 配置事务管理器 -->
  55. <bean id="transactionManager"
  56. class="org.springframework.orm.jpa.JpaTransactionManager">
  57. <property name="entityManagerFactory" ref="entityManagerFactory"></property>
  58. </bean>
  59.  
  60. <!-- 4. 配置支持注解的事务 -->
  61. <tx:annotation-driven transaction-manager="transactionManager"/>
  62.  
  63. <!-- 5. 配置 SpringData -->
  64. <!-- 加入 jpa 的命名空间 -->
  65. <!-- base-package: 扫描 Repository Bean 所在的 package -->
  66. <jpa:repositories base-package="com.atguigu.springdata"
  67. entity-manager-factory-ref="entityManagerFactory"></jpa:repositories>
  68.  
  69. </beans>

其中db.properties

  1. jdbc.user=root
  2. jdbc.password=1111
  3. jdbc.driverClass=com.mysql.jdbc.Driver
  4. jdbc.jdbcUrl=jdbc:mysql://localhost:3306/springdata

测试类:

  1. package com.atguigu.springdata.test;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.sql.SQLException;
  6. import java.util.ArrayList;
  7. import java.util.Arrays;
  8. import java.util.Date;
  9. import java.util.List;
  10.  
  11. import javax.persistence.criteria.CriteriaBuilder;
  12. import javax.persistence.criteria.CriteriaQuery;
  13. import javax.persistence.criteria.Path;
  14. import javax.persistence.criteria.Predicate;
  15. import javax.persistence.criteria.Root;
  16. import javax.sql.DataSource;
  17.  
  18. import org.junit.Test;
  19. import org.springframework.context.ApplicationContext;
  20. import org.springframework.context.support.ClassPathXmlApplicationContext;
  21. import org.springframework.data.domain.Page;
  22. import org.springframework.data.domain.PageRequest;
  23. import org.springframework.data.domain.Sort;
  24. import org.springframework.data.domain.Sort.Direction;
  25. import org.springframework.data.domain.Sort.Order;
  26. import org.springframework.data.jpa.domain.Specification;
  27.  
  28. import com.atguigu.springdata.Person;
  29. import com.atguigu.springdata.PersonRepsotory;
  30. import com.atguigu.springdata.PersonService;
  31. import com.atguigu.springdata.commonrepositorymethod.AddressRepository;
  32.  
  33. public class SpringDataTest {
  34.  
  35. private ApplicationContext ctx = null;
  36. private PersonRepsotory personRepsotory = null;
  37. private PersonService personService;
  38.  
  39. {
  40. ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  41. personRepsotory = ctx.getBean(PersonRepsotory.class);
  42. personService = ctx.getBean(PersonService.class);
  43. }
  44.  
  45. //使用自定义的方法,需要声明接口,并继承,同时完成实现类,此方法比较少用
  46. @Test
  47. public void testCustomRepositoryMethod(){
  48. personRepsotory.test();
  49. }
  50.  
  51. /**
  52. * 目标: 实现带查询条件的分页. id > 5 的条件
  53. *
  54. * 调用 JpaSpecificationExecutor 的 Page<T> findAll(Specification<T> spec, Pageable pageable);
  55. * Specification: 封装了 JPA Criteria 查询的查询条件
  56. * Pageable: 封装了请求分页的信息: 例如 pageNo, pageSize, Sort
  57. */
  58. //使用继承JpaSpecificationExecutor的方法实现条件查询+分页
  59. @Test
  60. public void testJpaSpecificationExecutor(){
  61. int pageNo = 3 - 1;
  62. int pageSize = 5;
  63. PageRequest pageable = new PageRequest(pageNo, pageSize);
  64.  
  65. //通常使用 Specification 的匿名内部类
  66. Specification<Person> specification = new Specification<Person>() {
  67. /**
  68. * @param *root: 代表查询的实体类.
  69. * @param query: 可以从中可到 Root 对象, 即告知 JPA Criteria 查询要查询哪一个实体类. 还可以
  70. * 来添加查询条件, 还可以结合 EntityManager 对象得到最终查询的 TypedQuery 对象.
  71. * @param *cb: CriteriaBuilder 对象. 用于创建 Criteria 相关对象的工厂. 当然可以从中获取到 Predicate 对象
  72. * @return: *Predicate 类型, 代表一个查询条件.
  73. */
  74. @Override
  75. public Predicate toPredicate(Root<Person> root,
  76. CriteriaQuery<?> query, CriteriaBuilder cb) {
  77. Path path = root.get("id");
  78. Predicate predicate = cb.gt(path, 5);
  79. return predicate;
  80. }
  81. };
  82.  
  83. Page<Person> page = personRepsotory.findAll(specification, pageable);
  84.  
  85. System.out.println("总记录数: " + page.getTotalElements());
  86. System.out.println("当前第几页: " + (page.getNumber() + 1));
  87. System.out.println("总页数: " + page.getTotalPages());
  88. System.out.println("当前页面的 List: " + page.getContent());
  89. System.out.println("当前页面的记录数: " + page.getNumberOfElements());
  90. }
  91.  
  92. //使用继承JpaRepository的方法
  93. @Test
  94. public void testJpaRepository(){
  95. Person person = new Person();
  96. person.setBirth(new Date());
  97. person.setEmail("xy@atguigu.com");
  98. person.setLastName("xyz");
  99. person.setId(28);
  100.  
  101. Person person2 = personRepsotory.saveAndFlush(person);
  102.  
  103. System.out.println(person == person2);
  104. }
  105.  
  106. //使用继承PagingAndSortingRespository的方法,实现分页
  107. @Test
  108. public void testPagingAndSortingRespository(){
  109. //pageNo 从 0 开始.
  110. int pageNo = 6 - 1;
  111. int pageSize = 5;
  112. //Pageable 接口通常使用的其 PageRequest 实现类. 其中封装了需要分页的信息
  113. //排序相关的. Sort 封装了排序的信息
  114. //Order 是具体针对于某一个属性进行升序还是降序.
  115. Order order1 = new Order(Direction.DESC, "id");
  116. Order order2 = new Order(Direction.ASC, "email");
  117. Sort sort = new Sort(order1, order2);
  118.  
  119. PageRequest pageable = new PageRequest(pageNo, pageSize, sort);
  120. Page<Person> page = personRepsotory.findAll(pageable);
  121.  
  122. System.out.println("总记录数: " + page.getTotalElements());
  123. System.out.println("当前第几页: " + (page.getNumber() + 1));
  124. System.out.println("总页数: " + page.getTotalPages());
  125. System.out.println("当前页面的 List: " + page.getContent());
  126. System.out.println("当前页面的记录数: " + page.getNumberOfElements());
  127. }
  128.  
  129. //使用继承CrudReposiory的方法
  130. @Test
  131. public void testCrudReposiory(){
  132. List<Person> persons = new ArrayList<>();
  133.  
  134. for(int i = 'a'; i <= 'z'; i++){
  135. Person person = new Person();
  136. person.setAddressId(i + 1);
  137. person.setBirth(new Date());
  138. person.setEmail((char)i + "" + (char)i + "@atguigu.com");
  139. person.setLastName((char)i + "" + (char)i);
  140.  
  141. persons.add(person);
  142. }
  143.  
  144. personService.savePersons(persons);
  145. }
  146.  
  147. @Test
  148. public void testModifying(){
  149. // personRepsotory.updatePersonEmail(1, "mmmm@atguigu.com");
  150. personService.updatePersonEmail("mmmm@atguigu.com", 1);
  151. }
  152.  
  153. //设置 nativeQuery=true 即可以使用原生的 SQL 查询
  154. @Test
  155. public void testNativeQuery(){
  156. long count = personRepsotory.getTotalCount();
  157. System.out.println(count);
  158. }
  159.  
  160. //使用 @Query 几种传递参数的方式
  161. @Test
  162. public void testQueryAnnotationLikeParam(){
  163. // List<Person> persons = personRepsotory.testQueryAnnotationLikeParam("%A%", "%bb%");
  164. // System.out.println(persons.size());
  165.  
  166. // List<Person> persons = personRepsotory.testQueryAnnotationLikeParam("A", "bb");
  167. // System.out.println(persons.size());
  168.  
  169. List<Person> persons = personRepsotory.testQueryAnnotationLikeParam2("bb", "A");
  170. System.out.println(persons.size());
  171. }
  172.  
  173. @Test
  174. public void testQueryAnnotationParams2(){
  175. List<Person> persons = personRepsotory.testQueryAnnotationParams2("aa@atguigu.com", "AA");
  176. System.out.println(persons);
  177. }
  178.  
  179. @Test
  180. public void testQueryAnnotationParams1(){
  181. List<Person> persons = personRepsotory.testQueryAnnotationParams1("AA", "aa@atguigu.com");
  182. System.out.println(persons);
  183. }
  184.  
  185. //使用 @Query 注解可以自定义 JPQL 语句以实现更灵活的查询
  186. @Test
  187. public void testQueryAnnotation(){
  188. Person person = personRepsotory.getMaxIdPerson();
  189. System.out.println(person);
  190. }
  191.  
  192. //根据外键条件查询,注意下划线的使用,若无下滑线,将优先获取person的属性,下滑线则表示为外键
  193. @Test
  194. public void testKeyWords2(){
  195. List<Person> persons = personRepsotory.getByAddress_IdGreaterThan(1);
  196. System.out.println(persons);
  197. }
  198.  
  199. //几种条件查询的例子
  200. @Test
  201. public void testKeyWords(){
  202. List<Person> persons = personRepsotory.getByLastNameStartingWithAndIdLessThan("X", 10);
  203. System.out.println(persons);
  204.  
  205. persons = personRepsotory.getByLastNameEndingWithAndIdLessThan("X", 10);
  206. System.out.println(persons);
  207.  
  208. persons = personRepsotory.getByEmailInAndBirthLessThan(Arrays.asList("AA@atguigu.com", "FF@atguigu.com",
  209. "SS@atguigu.com"), new Date());
  210. System.out.println(persons.size());
  211. }
  212.  
  213. //获取lastname为AA的person
  214. @Test
  215. public void testHelloWorldSpringData() throws FileNotFoundException, IOException, InstantiationException, IllegalAccessException{
  216. System.out.println(personRepsotory.getClass().getName());
  217. Person person = personRepsotory.getByLastName("AA");
  218. System.out.println(person);
  219. }
  220.  
  221. //验证数据库连接是否成功
  222. @Test
  223. public void testDataSource() throws SQLException {
  224. DataSource dataSource = ctx.getBean(DataSource.class);
  225. System.out.println(dataSource.getConnection());
  226. }
  227.  
  228. }

持久层类:

  1. package com.atguigu.springdata;
  2.  
  3. import java.util.Date;
  4. import java.util.List;
  5.  
  6. import org.springframework.data.jpa.repository.JpaRepository;
  7. import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
  8. import org.springframework.data.jpa.repository.Modifying;
  9. import org.springframework.data.jpa.repository.Query;
  10. import org.springframework.data.repository.query.Param;
  11.  
  12. /**
  13. * 1. Repository 是一个空接口. 即是一个标记接口
  14. * 2. 若我们定义的接口继承了 Repository, 则该接口会被 IOC 容器识别为一个 Repository Bean.
  15. * 纳入到 IOC 容器中. 进而可以在该接口中定义满足一定规范的方法.
  16. *
  17. * 3. 实际上, 也可以通过 @RepositoryDefinition 注解来替代继承 Repository 接口
  18. */
  19. /**
  20. * 在 Repository 子接口中声明方法
  21. * 1. 不是随便声明的. 而需要符合一定的规范
  22. * 2. 查询方法以 find | read | get 开头
  23. * 3. 涉及条件查询时,条件的属性用条件关键字连接
  24. * 4. 要注意的是:条件属性以首字母大写。
  25. * 5. 支持属性的级联查询. 若当前类有符合条件的属性, 则优先使用, 而不使用级联属性.
  26. * 若需要使用级联属性, 则属性之间使用 _ 进行连接.
  27. */
  28. //@RepositoryDefinition(domainClass=Person.class,idClass=Integer.class)
  29. public interface PersonRepsotory extends
  30. JpaRepository<Person, Integer>,
  31. JpaSpecificationExecutor<Person>, PersonDao{
  32.  
  33. //根据 lastName 来获取对应的 Person
  34. Person getByLastName(String lastName);
  35.  
  36. //WHERE lastName LIKE ?% AND id < ?
  37. List<Person> getByLastNameStartingWithAndIdLessThan(String lastName, Integer id);
  38.  
  39. //WHERE lastName LIKE %? AND id < ?
  40. List<Person> getByLastNameEndingWithAndIdLessThan(String lastName, Integer id);
  41.  
  42. //WHERE email IN (?, ?, ?) OR birth < ?
  43. List<Person> getByEmailInAndBirthLessThan(List<String> emails, Date birth);
  44.  
  45. //WHERE a.id > ?
  46. List<Person> getByAddress_IdGreaterThan(Integer id);
  47.  
  48. //查询 id 值最大的那个 Person
  49. //使用 @Query 注解可以自定义 JPQL 语句以实现更灵活的查询
  50. @Query("SELECT p FROM Person p WHERE p.id = (SELECT max(p2.id) FROM Person p2)")
  51. Person getMaxIdPerson();
  52.  
  53. //为 @Query 注解传递参数的方式1: 使用占位符.
  54. @Query("SELECT p FROM Person p WHERE p.lastName = ?1 AND p.email = ?2")
  55. List<Person> testQueryAnnotationParams1(String lastName, String email);
  56.  
  57. //为 @Query 注解传递参数的方式1: 命名参数的方式.
  58. @Query("SELECT p FROM Person p WHERE p.lastName = :lastName AND p.email = :email")
  59. List<Person> testQueryAnnotationParams2(@Param("email") String email, @Param("lastName") String lastName);
  60.  
  61. //SpringData 允许在占位符上添加 %%.
  62. @Query("SELECT p FROM Person p WHERE p.lastName LIKE %?1% OR p.email LIKE %?2%")
  63. List<Person> testQueryAnnotationLikeParam(String lastName, String email);
  64.  
  65. //SpringData 允许在占位符上添加 %%.
  66. @Query("SELECT p FROM Person p WHERE p.lastName LIKE %:lastName% OR p.email LIKE %:email%")
  67. List<Person> testQueryAnnotationLikeParam2(@Param("email") String email, @Param("lastName") String lastName);
  68.  
  69. //设置 nativeQuery=true 即可以使用原生的 SQL 查询
  70. @Query(value="SELECT count(id) FROM jpa_persons", nativeQuery=true)
  71. long getTotalCount();
  72.  
  73. //可以通过自定义的 JPQL 完成 UPDATE 和 DELETE 操作. 注意: JPQL 不支持使用 INSERT
  74. //在 @Query 注解中编写 JPQL 语句, 但必须使用 @Modifying 进行修饰. 以通知 SpringData, 这是一个 UPDATE 或 DELETE 操作
  75. //UPDATE 或 DELETE 操作需要使用事务, 此时需要定义 Service 层. 在 Service 层的方法上添加事务操作.
  76. //默认情况下, SpringData 的每个方法上有事务, 但都是一个只读事务. 他们不能完成修改操作!
  77. @Modifying
  78. @Query("UPDATE Person p SET p.email = :email WHERE id = :id")
  79. void updatePersonEmail(@Param("id") Integer id, @Param("email") String email);
  80. }

自定义方法时,声明的接口:

  1. package com.atguigu.springdata;
  2.  
  3. public interface PersonDao {
  4.  
  5. void test();
  6.  
  7. }

其实现类:使用原生entityManager

  1. package com.atguigu.springdata;
  2.  
  3. import javax.persistence.EntityManager;
  4. import javax.persistence.PersistenceContext;
  5.  
  6. public class PersonRepsotoryImpl implements PersonDao {
  7.  
  8. @PersistenceContext
  9. private EntityManager entityManager;
  10.  
  11. @Override
  12. public void test() {
  13. Person person = entityManager.find(Person.class, 11);
  14. System.out.println("-->" + person);
  15. }
  16.  
  17. }

PersonService:用于测试需要事务包裹的方法

  1. package com.atguigu.springdata;
  2.  
  3. import java.util.List;
  4.  
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. import org.springframework.transaction.annotation.Transactional;
  8.  
  9. @Service
  10. public class PersonService {
  11.  
  12. @Autowired
  13. private PersonRepsotory personRepsotory;
  14.  
  15. @Transactional
  16. public void savePersons(List<Person> persons){
  17. personRepsotory.save(persons);
  18. }
  19.  
  20. @Transactional
  21. public void updatePersonEmail(String email, Integer id){
  22. personRepsotory.updatePersonEmail(id, email);
  23. }
  24. }

与数据库表单对应的实体类:

  1. package com.atguigu.springdata;
  2.  
  3. import java.util.Date;
  4.  
  5. import javax.persistence.Column;
  6. import javax.persistence.Entity;
  7. import javax.persistence.GeneratedValue;
  8. import javax.persistence.Id;
  9. import javax.persistence.JoinColumn;
  10. import javax.persistence.ManyToOne;
  11. import javax.persistence.Table;
  12.  
  13. @Table(name="JPA_PERSONS")
  14. @Entity
  15. public class Person {
  16.  
  17. private Integer id;
  18. private String lastName;
  19.  
  20. private String email;
  21. private Date birth;
  22.  
  23. private Address address;
  24.  
  25. private Integer addressId;
  26.  
  27. @GeneratedValue
  28. @Id
  29. public Integer getId() {
  30. return id;
  31. }
  32.  
  33. public void setId(Integer id) {
  34. this.id = id;
  35. }
  36.  
  37. public String getLastName() {
  38. return lastName;
  39. }
  40.  
  41. public void setLastName(String lastName) {
  42. this.lastName = lastName;
  43. }
  44.  
  45. public String getEmail() {
  46. return email;
  47. }
  48.  
  49. public void setEmail(String email) {
  50. this.email = email;
  51. }
  52.  
  53. public Date getBirth() {
  54. return birth;
  55. }
  56.  
  57. public void setBirth(Date birth) {
  58. this.birth = birth;
  59. }
  60.  
  61. @Column(name="ADD_ID")
  62. public Integer getAddressId() {
  63. return addressId;
  64. }
  65.  
  66. public void setAddressId(Integer addressId) {
  67. this.addressId = addressId;
  68. }
  69.  
  70. @JoinColumn(name="ADDRESS_ID")
  71. @ManyToOne
  72. public Address getAddress() {
  73. return address;
  74. }
  75.  
  76. public void setAddress(Address address) {
  77. this.address = address;
  78. }
  79.  
  80. @Override
  81. public String toString() {
  82. return "Person [id=" + id + ", lastName=" + lastName + ", email="
  83. + email + ", brith=" + birth + "]";
  84. }
  85. }
  1. package com.atguigu.springdata;
  2.  
  3. import javax.persistence.Entity;
  4. import javax.persistence.GeneratedValue;
  5. import javax.persistence.Id;
  6. import javax.persistence.Table;
  7.  
  8. @Table(name="JPA_ADDRESSES")
  9. @Entity
  10. public class Address {
  11.  
  12. private Integer id;
  13. private String province;
  14. private String city;
  15.  
  16. @GeneratedValue
  17. @Id
  18. public Integer getId() {
  19. return id;
  20. }
  21.  
  22. public void setId(Integer id) {
  23. this.id = id;
  24. }
  25.  
  26. public String getProvince() {
  27. return province;
  28. }
  29.  
  30. public void setProvince(String province) {
  31. this.province = province;
  32. }
  33.  
  34. public String getCity() {
  35. return city;
  36. }
  37.  
  38. public void setCity(String city) {
  39. this.city = city;
  40. }
  41.  
  42. }

使用的jar包:

项目结构:

补充:

jpa+springdata的更多相关文章

  1. JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 1

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7703679.html ------------------------------------ ...

  2. JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 2

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7704914.html ------------------------------------ ...

  3. JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 3

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7718741.html ------------------------------------ ...

  4. JPA + SpringData 操作数据库 ---- 深入了解 SpringData

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7735616.html ------------------------------------ ...

  5. (转)JPA + SpringData

    jpa + spring data 约定优于配置 convention over configuration http://www.cnblogs.com/crawl/p/7703679.html 原 ...

  6. JPA + SpringData 操作数据库--Helloworld实例

    前言:谈起操作数据库,大致可以分为几个阶段:首先是 JDBC 阶段,初学 JDBC 可能会使用原生的 JDBC 的 API,再然后可能会使用数据库连接池,比如:c3p0.dbcp,还有一些第三方工具, ...

  7. SpringMVC+JPA+SpringData配置

    <properties>   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  ...

  8. Spring、SpringMVC、SpringData + JPA 整合详解

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7759874.html ------------------------------------ ...

  9. SpringBoot图文教程12—SpringData Jpa的基本使用

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...

随机推荐

  1. 原生Ajax总结

    HTTP协议 传统的请求和Ajax请求 Ajax定义 Asynchronous JavaScript and XML. Ajax异步的,JavaScript程序希望与服务器直接通信而不需要重新加载页面 ...

  2. Ios生产证书申请(含推送证书)

    一.Mac机上生成请求文件. Mac机上点击证书助手 => 从证书颁发机构请求证书 => 得到CertificateSigningRequest.certSigningRequest请求文 ...

  3. Android5.0以下出现NoClassDefFoundError

    事发起因 大周末的,突然接到老大的电话说很多用户无法安装新上线的APK,让我紧急Fix(现Android项目就我一己之力).但奇怪的是也没有Bug Reporter,而且开发过程中也一直没问题.根据上 ...

  4. 4.C#WinForm基础图片(显示和隐藏)

    要求: 软件上有一张图片,默认是隐藏的.用户在文本框中输入身份证号(131226198105223452),点击按钮,如果年龄大于18岁,则显示图片. 知识点: 取当前年份,Date Time Now ...

  5. ASP.NET 截获服务器生成的将要发送到客户端的html的方法

    有时候我们需要在将服务器端生成的html发送带客户端之前对这些html进行操作,比如生成静态html加之保存.改变生成的html中的某些内容等等,那么久可以通过如下的方案解决. 我总结了两种方式,个人 ...

  6. JSTL标签 参考手册

    前言 ========================================================================= JSTL标签库,是日常开发经常使用的,也是众多 ...

  7. 《高性能javascript》 领悟随笔之-------DOM编程篇

    <高性能javascript> 领悟随笔之-------DOM编程篇一 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...

  8. PHP基础知识第三趴

    今天如约放送函数部分吧,毕竟预告都出了,"广电"也没禁我......

  9. 用jmeter通过ssl验证访问https

    找了一个支付宝的网站尝试.https://memberprod.alipay.com/account/reg/index.htm 我用的是chrome,点这个小锁 如果是IE也可以在网页上右键,属性, ...

  10. Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境【转】

    项目建设完成之后的结构: 数据库的表结构如下: 环境建设:搭建Maven环境.Tomcat环境.需要MySql 数据库支持,使用的编程工具Eclipse (这些是前期准备): 开始创建工程: 1.创建 ...