在之前博客中已经springboot的一些基础知识点,接下来再学点其他的点。
一、springboot的测试
1、先创建一个子模块springboot-test ,web或者普通项目都行。准备好测试的test包
2、在pom.xml中导入测试要用的依赖包
<!--springmv支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- web支持: 1、web mvc; 2、restful; 3、jackjson支持; 4、aop ........ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
3、写一个启动类的应用程序
@SpringBootApplication
public class TestApp {
public static void main(String[] args) {
SpringApplication.run(TestApp.class);
}
}
4、在测试包中写一个测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApp.class)
public class SpringTest {
@Test
public void test() throws Exception{
System.out.println("zhangsan");
}
}
5、执行启动类的应用程序,打印出测试中的打印语句
二、springboot的持久化(集成三层结构)
Spring Boot就数据库持久化支持,支持原生Jdbc,也支持Mybatis和JPA。
1、Spring boot JdbcTemplate,原生jdbc操作
(1)创建一个子模块项目springboot-jdbc
(2)在pom.xml中引入MySQL和jdbc的maven依赖
<!-- web test springjdbc mysql-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
(3)准备好数据库。并在资源文件resources中配置连接数据库的四大金刚
spring.datasource.url = jdbc:mysql://localhost:3306/mytest
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
(4)domain层
public class User {
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(Long id, String name) {
this.id = id;
this.name = name;
}
public User(){}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
(5)dao层:接口和实现类
- 接口
public interface IUserDao {
//保存数据方法
void save(User user);
}
- 实现类
@Repository
public class UserDaoImpl implements IUserDao {
//注入jdbcTemplate对象
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void save(User user) {
//sql语句
String sql="insert into user(name) values(?)";
//执行sql,并将名字存到数据库中
jdbcTemplate.update(sql,user.getName());
}
}
(6)service层的接口和实现类。service层要开启事务
- 接口
public interface IUserService {
//保存数据方法
void save(User user);
}
- 实现类
注意:事务会起作用。当运行出错时,事件不会增加到数据库中
@Service
@Transactional(propagation = Propagation.SUPPORTS)//没有事务
public class UserServiceImpl implements IUserService{
//注入dao对象
@Autowired
private IUserDao userDao;
//新增数据
@Override
//新增操作需要事务。出错之后,会回滚事务,不会将数据插入到数据库
@Transactional(propagation =Propagation.REQUIRED,readOnly = false)
public void save(User user) {
userDao.save(user);
//定义一个异常,看事务是否起作用。会起作用
// System.out.println(1/0);
}
}
(7)创建和启动类
@SpringBootApplication
public class SpringJdbcApp {
public static void main(String[] args) {
SpringApplication.run(SpringJdbcApp.class);
}
}
(8)测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringJdbcApp.class)
public class SpringJdbcTest {
@Autowired
private IUserService userService;
@Test
public void test() throws Exception{
User user = new User();
user.setName("张三");
userService.save(user);
}
}
2、springboot mybatis持久化操作
mybatis的注解版本操作。
(1)新建个maven子模块,springboot-mybatis
(2)在pom.xml中引入相关依赖
<!--springmvc支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--测试支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- mysql 数据库驱动. -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--
spring-boot mybatis依赖:
请不要使用1.0.0版本,因为还不支持拦截器插件,
1.1.1 是博主写帖子时候的版本,大家使用最新版本即可
-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!--
MyBatis提供了拦截器接口,我们可以实现自己的拦截器,
将其作为一个plugin装入到SqlSessionFactory中。
Github上有位开发者写了一个分页插件,我觉得使用起来还可以,挺方便的。
Github项目地址: https://github.com/pagehelper/Mybatis-PageHelper
-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.0</version>
</dependency>
(3)准备好数据库。并在资源文件resources中配置连接数据库的四大金刚
与上面jdbc操作是同一个数据库。方便点
spring.datasource.url = jdbc:mysql://localhost:3306/mytest
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
(4)domain层也是和上面jdbc一样的
(5)mapper层
public interface UserMapper {
//使用注解的方式写sql语句
@Insert("insert into user(name) values(#{name})")
public void save(User user);
}
(6)service层接口和实现类
- 接口
public interface IUserService {
//保存数据方法
void save(User user);
}
- 实现类
@Service
@Transactional(propagation = Propagation.SUPPORTS)//没有事务
public class UserServiceImpl implements IUserService{
//注入dao对象
@Autowired
private UserMapper userMapper;
//新增数据
@Override
//新增操作需要事务。出错之后,会回滚事务,不会将数据插入到数据库
@Transactional(propagation =Propagation.REQUIRED,readOnly = false)
public void save(User user) {
userMapper.save(user);
//定义一个异常,看事务是否起作用
// System.out.println(1/0);
}
}
(7)创建和启动类
注意:mapper层扫描的注解
/*
* 启动类
* */
@SpringBootApplication
//@ComponentScan 测试包放在其他层就需要这个注解来扫描组件
@MapperScan(value = "cn.lyq.mapper")//配置mapper层扫描
public class SpringMybatisApp {
public static void main(String[] args) {
SpringApplication.run(SpringMybatisApp.class);
}
}
(8)测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringJdbcApp.class)
public class SpringJdbcTest {
@Autowired
private IUserService userService;
@Test
public void test() throws Exception{
User user = new User();
user.setName("张三");
userService.save(user);
}
}
mybatis的xml配置版本。以下是有稍微变动的地方。
(1)在mapper层写一个方法
(2)在资源文件resources中写mapper的xml文件
(3)在application.properties中配置了别名。上面的xml映射文件才能用别名
(4) mapper层方法
(5)service层接口和实现类
- 接口
- 实现类
(5)启动springboot
/*
* 启动类
* */
@SpringBootApplication
//@ComponentScan 测试包放在其他层就需要这个注解来扫描组件
@MapperScan(value = "cn.lyq.mapper")//配置mapper层扫描
public class SpringMybatisApp {
public static void main(String[] args) {
SpringApplication.run(SpringMybatisApp.class);
}
}
(6)测试类
三、springboot持久化操作和分页
基于上面的mybatis来的,因为mybatis的拦截器自带分页对象pagehelper。
1、mybatis的分页插件pagehelper在上面操作时已经导入到了pom.xml中了
2、在springboot中分页,要写个类做配置。MyBatisConfiguration类
@Configuration //相当于application-Xxx.xml
public class MyBatisConfiguration {
//相当于配置文件里面配置<bean>
@Bean
public PageHelper pageHelper(){
PageHelper pageHelper = new PageHelper();
Properties p = new Properties();
//配置分页的参数设置
//和startPage中的pageNum效果一样
p.setProperty("offsetAsPageNum", "true");
//设置为true时,使用RowBounds分页会进行count查询
p.setProperty("rowBoundsWithCount", "true");
// 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页
p.setProperty("reasonable", "true");
pageHelper.setProperties(p);
return pageHelper;
}
}
3、在mapper的xml映射文件中写个查询所有的sql语句
4、在mapper接口中写上相应的查询所有方法
5、service层接口和实现类
- 接口:
- 实现类