SpringBoot中使用mybatis访问mysql数据库,使用纯注解的方式实现

当前环境: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,birthonWork

7.总结

1.SpringBoot中使用MyBatis连接数据库的时候,首先需要导入依赖

2.需要编写实体类对应的dao层并添加@Mapper注解进行标记,需要使用的方法上面可以使用@Insert和其他注解,还可以使用@InsertProvider或者其他的Provider,service和serviceImpl中与原来的MVC架构一致=

3.在编写入口类或者其他的地方使用@MapperScan用来扫描对应的@Mapper注解

4.整体来讲,在SpringBoot中使用mybatis还是比较简单的,相对于JPA来讲,多了许多SQL语句,使用类SQL注解的方式更加明确了当前方法的职责

以上纯属个人见解,如有问题请联系本人!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值