配置数据源
在application.properties文件中进行配置
spring.datasource.url=jdbc:mysql://lacalhost:3306/freeroom
spring.datasource.username=root
spring.datasource.password=123
# 最大等待连接中的数量 0无限制
spring.datasource.tomcat.max-idle=10
# 最大连接活动数
spring.datasource.tomcat.max-active=50
# 数据库连接池初始化连接数
spring.datasource.tomcat.initial-size=5
JdbcTemplate
JdbcTemplate模版是Spring框架提供的,在实际的工作使用较少,基本上都在使用Hibernate和MyBatis
JPA(Hibernate)
JPA(Java Persistence API ,java持久化API),在spring boot中JPA是依靠Hibernate才得以实现的。
使用方法
修改pom.xml
添加jpa的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
定义一个实体
@Entity(name = "user")
@Table(name="jpademo")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id =null;
@Column(name = "name")
private String name=null;
/**
* setter and getter 必须要有不然拿不到数据
*/
}
- @Entity 标注这是一个实体类
- @Table 配置的属性name指定映射数据库的表
- @Id 标注那个属性为表的逐渐
- @GeneratedValue配置采用何种策略生成主键
- @Column 如果属性名和数据库的不一致可以使用这个注解来指定
定义一个接口
interface JpaUserRespository extends JpaRepository<User,Long> {
}
此接口不用实现定义就行了,之后会自动注入
查询
@Controller
@RequestMapping("/jpa")
public class JpaController {
@Autowired
private JpaUserRespository jpaUserRespository = null;
@RequestMapping("/getUser")
@ResponseBody
public User getUser(){
User user = jpaUserRespository.findAll().get(0);
return user;
}
}
在对数据进行操作的时候,使用自动注入的jpaUserRespository实例进行操作。
最后一步
最后需要将接口扫描到Spring IoC容器中。同时还需要将实体类(Entity Bean)注册给JPA。使用@EnableJpaRespositories和@EntityScan两个注解来实现
@SpringBootApplication
@EnableJpaRepositories
@EntityScan
public class FreeRomeApplication {
public static void main(String[] args) {
System.out.println("开始");
SpringApplication.run(FreeRomeApplication.class,args);
System.out.println("结束");
}
}
JPA配置
同样也是在application.properties
# 选择Hibernate数据定义语言(DDl)策略为update
spring.jpa.hibernate.ddl-auto=update
JPA查询语言
为了更加灵活的查询,可以使用JPA查询语言(JPQL)。使用方式是@Query标识语句。
JPA命名查询
在先前的JpaUserRespository接口中添加方法
例:
public User findByName(String name);
等效于
select u from User u where u.name = ?1
也就是说findByName 会根据相应表里的字段name来select 参数name就是要查询的内容
MyBatis
现目前java持久层最为主流的技术应该就是MyBatis,它更简单、灵活、易用。
参考教程
使用方法
基础配置
MyBatis是基于SqlSessionFactory构建的框架
- 添加依赖
第一步也是要先引入依赖mybatis-spring-boot-starter和mysql-connector-java
可以在https://mvnrepository.com/找mybatis-spring-boot-starter的最新版本
- 配置文件
server.port=8333
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/erp?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=153963
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- 创建Bean
public class User{
private int id;
private String name;
priavte int age;
private double money;
/**
setter,getter and toString
**/
}
全注解方式
- Dao层开发
@Mapper
public interface UserDao{
/**
1. 通过名字查询用户信息
**/
@Select("SELECT * FROM user WHERE name = #{name}")
User findUserByName(@Param("name")String name);
/**
2. 查询所有用户信息
**/
@Select("SELECT * FROM user")
List<User> findAllUser();
/**
3. 插入用户信息
**/
@Insert("INSERT INTO user(name,age,money) Values(#{name},#{age},#{money})")
void insertUser(@Param("name") String name,@Param("age") Integer age),@Param("money") Double money)
/**
* 根据 id 更新用户信息
*/
@Update("UPDATE user SET name = #{name},age = #{age},money= #{money} WHERE id = #{id}")
void updateUser(@Param("name") String name,@Param("age") Integer age, @Param("money") Double money,@Param("id") int id);
/**
* 根据 id 删除用户信息
*/
@Delete("DELETE from user WHERE id = #{id}")
void deleteUser(@Param("id") int id);
}
- Service层
@Service
public class UserService{
@Autowired
private UserDao userDao;
public User selectUserByName(String name){
return userDao.findUserByName(name);
}
/**
*........
**/
/**
* 根据id 删除用户
*/
public void deleteService(int id) {
userDao.deleteUser(id);
}
}
注意如果@Autowired UserDao时提示找不到可以尝试以下方法:
方法1:在mapper文件上加@Repository注解,这是从spring2.0新增的一个注解,用于简化 Spring 的开发,实现数据访问
方法2:在mapper文件上加@Component注解,把普通pojo实例化到spring容器中
- Controller层
@RestController
@RequestMapping("/user")
public class UserController{
@Autowired
private UserService userService'
@RequestMapping("/query")
public User testQuery(){
return userService.selectUserByName("Daisy");
}
@RequestMapping("/insert")
public List<User> testInsert() {
userService.insertService();
return userService.selectAllUser();
}
@RequestMapping("/changemoney")
public List<User> testchangemoney() {
userService.changemoney();
return userService.selectAllUser();
}
@RequestMapping("/delete")
public String testDelete() {
userService.deleteService(3);
return "OK";
}
]
- 启动类
//此注解表示SpringBoot启动类
@SpringBootApplication
// 此注解表示动态扫描DAO接口所在包,实际上不加下面这条语句也可以找到
@MapperScan("top.snailclimb.dao")
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}