目录
MyBatis
简介
引入 mybatis 组件
代码实战
MyBatis
@
简介
优点
最大的优点是 SQL 语句灵活, 适合调优情景, 业务复杂情景
劣势
最大的劣势是不同数据库之间的迁移
引入 mybatis 组件
pom.xml 中加入
- <dependency>
- <groupId>MySQL</groupId>
- <artifactId>MySQL-connector-java</artifactId>
- </dependency>
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>2.1.1</version>
- </dependency>
application.properties 中加入
- #dateSource
- spring.datasource.driverClassName=com.MySQL.cj.jdbc.Driver
- spring.datasource.url=jdbc:MySQL://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
- spring.datasource.username=root
- spring.datasource.password=root
- # mybatis
- # 下划线转驼峰开启
- mybatis.configuration.map-Underscore-to-camel-case=true
- # mapper 扫描位置
- mybatis.mapper-locations=classpath:mapper/*.xml
需要说明的是, 我引入的 MySQL 驱动为 com.MySQL.cj.jdbc.Driver, 而不是 com.MySQL.jdbc.Driver. 以下是一些参数的说明;
serverTimezone: 该驱动需要指定某时区.
useUnicode: 开启指定编码.
characterEncoding: 指定读取数据库的编码, 因为项目采用 UTF-8, 存取数据库信息时保持一致.
useSSL: 是否建立 SSL 连接, 我显示选的否, 因为这要为服务器证书验证提供信任库, 暂时没条件.
代码实战
本地的 MySQL 版本为 5.7.20.
建表语句
- CREATE TABLE USER_INFO
- (
- user_id DECIMAL(10) PRIMARY KEY NOT NULL,
- user_name VARCHAR(20) DEFAULT "" NOT NULL
- );
- CREATE UNIQUE INDEX USER_INFO_user_id_uindex ON USER_INFO (user_id);
- ALTER TABLE USER_INFO COMMENT = '用户基本信息表';
插入数据
- INSERT INTO test.user_info (user_id, user_name) VALUES (1, '特朗普');
- INSERT INTO test.user_info (user_id, user_name) VALUES (2, '唐纳德');
现在的项目路径为
在 SpringBoot 的入口类中加 @MapperScan 注解, 以扫描 DAO 类, 不用在每个 dao 接口加个 @Mapper 注解.
- package com.example;
- import org.mybatis.spring.annotation.MapperScan;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- @SpringBootApplication
- @MapperScan("com.example.dao")
- public class DemoApplication {
- public static void main(String[] args) {
- SpringApplication.run(DemoApplication.class, args);
- }
- }
注: 如果没有分拆项目成微服务架构, 或分布式架构, application 主类中的 @SpringBootApplication 自动会扫描本包中的 @Controller,@Service,@Resource 等, 是不需要浪费另一行 @ComponentScan 注解, 配置路径的.
UserController.java
- package com.example.controller;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.Web.bind.annotation.ResponseBody;
- import com.example.service.IUserService;
- @Controller
- @RequestMapping("user")
- public class UserController {
- @Autowired
- private IUserService userService;
- @RequestMapping("/queryUser")
- @ResponseBody
- void queryUser() {
- this.userService.queryUser();
- }
- }
IUserService.java
- package com.example.service;
- public interface IUserService {
- void queryUser();
- }
UserServiceIml.java
- package com.example.service;
- import com.example.dao.UserDao;
- import com.example.entity.UserEntity;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.util.List;
- @Service("userService")
- public class UserServiceIml implements IUserService {
- @Resource
- private UserDao userDao;
- @Override
- public void queryUser() {
- List<UserEntity> userList = this.userDao.queryUser();
- System.out.println("================");
- System.out.println(userList);
- System.out.println("================");
- }
- }
注: 如果是 SSM 架构过来的, 这个 @Resource 注解可能比较陌生, 因为我估计会和我之前一样用 @Autowired, 但是我是没有在 dao 层用 @Repository 注解的, 之前用了在主类用了 @MapperScan 自动去扫描所有的 dao, 所以不能再用之前的 @Autowired.
UserDao.java
- package com.example.dao;
- import com.example.entity.UserEntity;
- import java.util.List;
- public interface UserDao {
- List<UserEntity> queryUser();
- }
UserEntity.java
- package com.example.entity;
- public class UserEntity {
- private long userId;
- private String userName;
- public long getUserId() {
- return userId;
- }
- public void setUserId(long userId) {
- this.userId = userId;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- @Override
- public String toString() {
- return "UserEntity{" +
- "userId=" + userId +
- ", userName='" + userName + '\'' +
- '}';
- }
- }
如果你运行不成功, 请对比引入的包的版本, 和数据库配置是否是根据你本地的, 顺便看看注解是否和文中一样.
效果图如下;
注: 如果是跟着本教程来的, 因为一开始就引入了 spring security, 而新增的路径不在刚才的权限中, 所以我给 zs 用户改成了 user 下的皆可访问. 如果没有跟着之前配置 spring security, 无需理会如下内容
- //http.authorizeRequests().antMatchers("/user/addUser").hasRole("AAA")
- http.authorizeRequests().antMatchers("/user/**").hasRole("AAA")
来源: https://www.cnblogs.com/lgx211/p/11926690.html