1、pom文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <groupId>com.example</groupId> 7 <artifactId>demo</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <packaging>jar</packaging> 10 11 <name>demo</name> 12 <description>Demo project for Spring Boot</description> 13 14 <parent> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-parent</artifactId> 17 <version>2.1.0.RELEASE</version> 18 <relativePath/> <!-- lookup parent from repository --> 19 </parent> 20 21 <properties> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 24 <druid.version>1.1.10</druid.version> 25 <mysql-connector.version>5.1.39</mysql-connector.version> 26 <java.version>1.8</java.version> 27 </properties> 28 29 <dependencies> 30 <dependency> 31 <groupId>org.springframework.boot</groupId> 32 <artifactId>spring-boot-starter-data-jpa</artifactId> 33 </dependency> 34 <dependency> 35 <groupId>org.springframework.boot</groupId> 36 <artifactId>spring-boot-starter-web</artifactId> 37 </dependency> 38 <dependency> 39 <groupId>org.mybatis.spring.boot</groupId> 40 <artifactId>mybatis-spring-boot-starter</artifactId> 41 <version>1.3.2</version> 42 </dependency> 43 <!-- MySQL 连接驱动依赖 --> 44 <dependency> 45 <groupId>mysql</groupId> 46 <artifactId>mysql-connector-java</artifactId> 47 <version>${mysql-connector.version}</version> 48 </dependency> 49 <dependency> 50 <groupId>com.alibaba</groupId> 51 <artifactId>druid</artifactId> 52 <version>${druid.version}</version> 53 </dependency> 54 <dependency> 55 <groupId>com.alibaba</groupId> 56 <artifactId>druid-spring-boot-starter</artifactId> 57 <version>${druid.version}</version> 58 </dependency> 59 <dependency> 60 <groupId>javax.servlet</groupId> 61 <artifactId>javax.servlet-api</artifactId> 62 </dependency> 63 64 <dependency> 65 <groupId>org.springframework.boot</groupId> 66 <artifactId>spring-boot-starter-test</artifactId> 67 <scope>test</scope> 68 </dependency> 69 <!-- MySql 5.5 Connector --> 70 <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> 71 <dependency> 72 <groupId>mysql</groupId> 73 <artifactId>mysql-connector-java</artifactId> 74 <version>5.1.47</version> 75 </dependency> 76 </dependencies> 77 <build> 78 <plugins> 79 <plugin> 80 <groupId>org.springframework.boot</groupId> 81 <artifactId>spring-boot-maven-plugin</artifactId> 82 </plugin> 83 </plugins> 84 </build> 85 </project>
2、yml文件
1 spring: 2 datasource: 3 druid: 4 mysql: 5 name: mysql 6 type: com.alibaba.druid.pool.DruidDataSource 7 driver-class-name: com.mysql.jdbc.Driver 8 url: jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf8&useSSL=false 9 username: root 10 password: 123456
3、编写entity
1 @Entity 2 @Table(name = "smbms_user")//指明映射到数据库中的哪个表 3 public class User { 4 @javax.persistence.Id 5 @GeneratedValue(strategy = GenerationType.AUTO)//对于自增的主键加注解 6 private Integer id; 7 //用户编码 8 private String userCode; 9 10 @Column(name = "user_Name") 11 private String userName; 12 13 @Column(name = "user_Password") 14 private String userPassword; 15 16 //用户性别 17 @Column(name = "gender") 18 private int gender; 19 20 @Column(name = "birthday") 21 private Date birthday; 22 @Column(name = "phone") 23 private String phone; 24 @Column(name = "address") 25 private String address; 26 27 @Column(name = "create_By") 28 private Integer createBy; 29 30 @Column(name = "creation_Date") 31 private Date creationDate; 32 33 @Column(name = "modify_By") 34 private Integer modifyBy; 35 36 //更新时间 37 @Column(name = "modify_Date") 38 private Date modifyDate;
4、编写dao
1 /** 2 * @RepositoryDefinition(domainClass = UserDao.class, idClass = Integer.class) 3 * public interface UserDao{}等价于以下方式 4 */ 5 @Repository 6 public interface UserDao extends JpaRepository<User, Integer> { 7 8 public List<User> findById(int id); 9 10 @Modifying 11 @Transactional 12 @Query(value = "update User set userName =?1 where id=?2 ") 13 void updateName(String userName, int id); 14 15 //注解使用sql语句的时候,只要把nativeQuery属性改为true就可以了,同时,书写sql语句需要使用value来定义, 16 // nativeQuery = true表示使用写的sql,不是HQL 17 @Query(nativeQuery = true, value = "select * from smbms_user where user_name= ? ") 18 public List<User> findByUserName(String name); 19 20 }
5、配置datasource
1 @Configuration 2 public class GlobalDataSourceConfiguration { 3 4 private static Logger LOG = LoggerFactory.getLogger(GlobalDataSourceConfiguration.class); 5 6 @Bean 7 @ConfigurationProperties(prefix = "spring.datasource.druid.mysql") 8 public DataSource primaryDataSource() { 9 LOG.info("-------------------- primaryDataSource init ---------------------"); 10 return DruidDataSourceBuilder.create().build(); 11 } 12 }
6、备注
1)Dao层要写成interface,然后继承 JpaRepository<Entity,Key>,第一个是这个接口有关的实体,第二个参数是这个实体的主键。
2)几种主键生成策略的比较:
SEQUENCE,IDENTITY两种策略由于针对的是特殊的一些数据库,所以如果在需求前期,未确定系统要支持的数据库类型时,最好不要使用。因为一旦更改数据库类型时,例如从Oracle变更为MySQL时,此时使用的Sequence策略就不能使用了,这时候需要变更设置,会变得很麻烦。
AUTO自动生成策略虽然能够自动生成主键,但主键的生成规则是JPA的实现者来确定的,一旦使用了这种策略,用户没有办法控制,比如说初识值是多少,每次累加值是多少,这些只能靠JPA默认的实现来生成。对于比较简单的主键,对主键生成策略要求少时,采用的这种方式比较好。
TABLE生成策略是将主键的值持久化在数据库中表中,因为只要是关系型的数据库,都可以创建一个表,来专门保存生成的值,这样就消除了不同数据库之间的不兼容性。另外,这种策略也可是设置具体的生成策略,又弥补了AUTO策略的不足。所以,这种策略既能保证支持多种数据库,又有一定的灵活性。
若以上的4种主键生成策略仍不满足需求,这时可以通过一定的规则来设置主键的值。例如利用UUID作为主键,也是常用的策略之一,此时就需要在程序中自动生成,然后设置到实体的主键上,而不能通过JPA的主键生成策略来实现了。
3)几种注解
@Basic 表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的 getXxxx() 方法
@Basic fetch: 表示该属性的读取策略,有 EAGER 和 LAZY 两种,分别表示主支抓取和延迟加载,默认为 EAGER,optional:表示该属性是否允许为null, 默认为true
@Transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic
1 //工具方法,不需要映射为数据表的一列 2 @Transient 3 public String getInfo(){ 4 return "lastName:"+lastName+",email:"+email; 5 }
@Temporal:在核心的 Java API 中并没有定义 Date 类型的精度(temporal precision). 而在数据库中,表示 Date 类型的数据有 DATE, TIME, 和 TIMESTAMP 三种精度(即单纯的日期,时间,或者两者 兼备)。
1 @Temporal(TemporalType.TIMESTAMP)// 时间戳 2 public Date getCreatedTime() { 3 return createdTime; 4 } 5 6 @Temporal(TemporalType.DATE) //时间精确到天 7 public Date getBirth() { 8 return birth; 9 }
4)jpa语法与sql语法比较
Keyword | Sample | JPQL snippet |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
以上仅供参考!!!!!!!!!!!!