当前环境:JDK1.8、MAVEN 3.6.1、eclipse
1.添加mybatis的支持
当前的
pom
文件如下:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.4.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 配置mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- 添加mysql的驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
2.创建实体类
当前实体类
User
的内容如下:
**
* @description 实体类User
* @author hy
* @date 2019-08-09
*/
public class User {
private Integer id;
private String name;
private Date birth;
private Boolean onWork;
....省略getter、setter和toString等方法
}
3.添加日期转换器,和其他的dao和service层,以及SQL处理器
日期类型转换器前面已经有了,不再显示内容
创建
UserDao
的内容如下:
/**
* @description 对应User类的dao层
* @author hy
* @date 2019-08-09
*/
@Mapper//标记当前为Mapper并可以被mybatis所出创建使用
public interface UserDao {
// 根据用户编号查询用户信息
@Select("select id,name,birth,onWork from user where id =#{id}")
User findById(@Param("id") Integer id);
// 查询所有的用户数据
@Select("select id,name,birth,onWork from user")
List<User> findAll();
// 添加用户信息
@InsertProvider(type = UserSqlProvider.class, method = "addUser")
void addUser(User user);
// 更新用户数据信息
@Update("update user set name=#{name},birth=#{birth},onWork=#{onWork} where id=#{id}")
void updateUser(User user);
// 根据用户的id删除用户信息
@Delete("delete from user where id=#{id}")
void deleteUserById(@Param("id") Integer id);
}
UserService中跟UserDao的内容一致,就是没有一些注解
UserServiceImpl
中的内容如下:
/**
* @description 对应User的Service的实现类
* @author hy
* @date 2019-08-09
*/
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)//使用事务
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao;
// 根据用户的id编号查找用户信息
@Override
public User findById(Integer id) {
return userDao.findById(id);
}
// 查询所有的用户信息
@Override
public List<User> findAll() {
return userDao.findAll();
}
// 添加用户信息
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
@Override
public void addUser(User user) {
userDao.addUser(user);
}
// 更新用户数据信息
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
@Override
public void updateUser(User user) {
userDao.updateUser(user);
}
// 根据用户的id编号删除用户数据信息
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
@Override
public void deleteUserById(Integer id) {
userDao.deleteUserById(id);
}
}
UserSqlProvider
使用来专门处理SQL语句的,其内容如下:
/**
* @description 解决User的SQL问题
* @author hy
* @date 2019-08-09
*/
public class UserSqlProvider {
private static final String SQL_SPLIT_STRING = ",";
/**
* @description 对应UserDao中的addUser方法,组织SQL语句
* @param user 需要添加的user用户
* @return SQL语句
*/
public String addUser(User user) {
StringBuilder builderColumn = new StringBuilder();
StringBuilder builderValues = new StringBuilder();
builderColumn.append("insert into user (");
builderValues.append("values(");
if (user.getName() != null && !"".equals(user.getName().trim())) {
builderColumn.append("name,");
builderValues.append("#{name},");
}
if (user.getBirth() != null) {
builderColumn.append("birth,");
builderValues.append("#{birth},");
}
if (user.getOnWork() != null) {
builderColumn.append("onWork,");
builderValues.append("#{onWork},");
}
if (builderColumn.toString().endsWith(SQL_SPLIT_STRING)) {
builderColumn.delete(builderColumn.length() - 1, builderColumn.length());
}
if (builderValues.toString().endsWith(SQL_SPLIT_STRING)) {
builderValues.delete(builderValues.length() - 1, builderValues.length());
}
builderColumn.append(")");
builderValues.append(")");
return builderColumn.toString() + " " + builderValues.toString();
}
}
4.创建Controller层
UserController
类中的内容如下:
/**
* @description 简答的userController用来测试数据的增删改查
* @author hy
* @date 2019-08-09
*/
@RestController
public class UserController {
@Autowired
UserService userService;
/**
* @description 根据id查询用户的信息
* @param id 需要查询的用户的id编号
* @return 查询后的用户信息
*/
@RequestMapping("/findUserById/{id}")
public String findUserById(@PathVariable Integer id) {
User findUser = userService.findById(id);
return findUser.toString();
}
/**
* @description 查询用户的信息列表
* @return 用户的信息列表
*/
@RequestMapping("/findUserList")
public String findUserList() {
List<User> findAll = userService.findAll();
return findAll.toString();
}
/**
* @description 删除用户数据信息
* @param id 删除用户信息的编号
* @return 删除成功或者失败的信息
*/
@RequestMapping("/deleteUserById/{id}")
public String deleteUserById(@PathVariable Integer id) {
userService.deleteUserById(id);
return "【删除编号为】" + id + " 成功!";
}
/**
* @description 更新用户信息
* @param user 修改后的用户信息
* @return 更新成功或者失败的提示信息
*/
@RequestMapping("/updateUserById")
public String updateUserById(User user) {
userService.updateUser(user);
return "【更新编号为】" + user.getId() + " 成功!";
}
/**
* @description 添加用户信息
* @param user 用户实例
* @return 添加成功或错误的字符串
*/
@RequestMapping("/addUser")
public String addUser(User user) {
userService.addUser(user);
return "【添加用户:" + user.getName() + "】 成功!";
}
}
5.编写入口类Application
Application
中的内容如下:
/**
* @description 入口类
* @author hy
* @date 2019-08-09
*/
@RestController
@SpringBootApplication
//开启Mapper扫描,将当前的具有@Mapper注解的类解析并创建代理
@MapperScan(basePackages = { "com.hy.springboot.mybatis.mysql.demo.dao" })
public class Application {
@Autowired
DataSource dataSource;
@RequestMapping("/dataSource")
public String dataSource() throws SQLException {
return dataSource.getConnection().toString();
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
6.创建数据库
数据库的字段为:
id(主键自增int类型)
,name
,birth
,onWork
7.总结
1.SpringBoot中使用MyBatis连接数据库的时候,首先需要导入依赖
2.需要编写实体类对应的dao层并添加@Mapper
注解进行标记,需要使用的方法上面可以使用@Insert和其他注解
,还可以使用@InsertProvider或者其他的Provider
,service和serviceImpl中与原来的MVC架构一致=
3.在编写入口类或者其他的地方使用@MapperScan
用来扫描对应的@Mappe
r注解
4.整体来讲,在SpringBoot中使用mybatis还是比较简单的,相对于JPA来讲,多了许多SQL语句,使用类SQL注解的方式更加明确了当前方法的职责
以上纯属个人见解,如有问题请联系本人!