博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
22、整合mybatis
阅读量:6214 次
发布时间:2019-06-21

本文共 5823 字,大约阅读时间需要 19 分钟。

 搭建环境:

 1)、创建工程需要的maven坐标

 

这个mybatis的starter是mybatis官方出的适应springboot

 

2)、数据连接池的使用
引入Druid数据连接池
com.alibaba
druid
1.1.10

 

3)、数据连接池的配置
配置文件的设置:
依然是Druid的配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/users?serverTimezone=GMTspring.datasource.username=rootspring.datasource.password=1234spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.type=com.alibaba.druid.pool.DruidDataSource#其他配置# 下面为连接池的补充设置,应用到上面所有数据源中spring.datasource.initialSize=5spring.datasource.minIdle=5spring.datasource.maxActive=20# 配置获取连接等待超时的时间spring.datasource.maxWait=60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒spring.datasource.timeBetweenEvictionRunsMillis=60000# 配置一个连接在池中最小生存的时间,单位是毫秒spring.datasource.minEvictableIdleTimeMillis=300000spring.datasource.validationQuery=SELECT 1 FROM DUALspring.datasource.testWhileIdle=truespring.datasource.testOnBorrow=falsespring.datasource.testOnReturn=false# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙spring.datasource.filters=stat,wallspring.datasource.logSlowSql=true

 

4)、Druid的后台监控.......

5)、创建pojo类:
与数据库中的表对应
public class Employee {    private Integer id;    private String lastName;    private Integer gender;    private String email;    private Integer dId;...}
public class Department {    private Integer id;    private String departmentName;....}

此时的基本环境已经搭建完成

 

使用MyBatis

1)、注解版:
mapper接口类
@Repository//指定这是一个操作数据库的mapper@Mapperpublic interface DepartMapper {    @Select("select * from department where id=#{id}")    public Department getDeptById(Integer id);    @Delete("delete from department where id=#{id}")    public int deleteDeptById(Integer id);    @Insert("insert into department(departmentName) values(#{departmentName})")    public int insertDept(Department department);    @Update("update department set department_name=#{departmentName} where id=#{id}")    public int updateDept(Department department);}

 

注解版本的都是用注解来进行标注,没有配置文件,所有的sql语句都在标签里面

 

controller类的实现方法:

@ResponseBody@Controllerpublic class DeptController {    @Autowired    DepartMapper departMapper;    //模拟查询    @RequestMapping("/dept/{id}")    public Department getDept(@PathVariable("id")Integer id){        Department dept = departMapper.getDeptById(id);        return dept;    }    //模拟插入    @RequestMapping("/dept")    public Department insertDept(Department department){        departMapper.insertDept(department);        return department;    }}

测试模拟插入:

测试查询:

 

在模拟插入的时候可以看到id为null,此时可以使用:
此时的自增主键也乐意被重新封装到对象中
//使用自动生成的组件@Options(useGeneratedKeys = true,keyProperty = "id")@Insert("insert into department(departmentName) values(#{departmentName})")public int insertDept(Department department);

问题:

此时的数据表列值发生改变

@Select("select * from department where id=#{id}")public Department getDeptById(Integer id);

 此时执行查询department_name是封装不到对象中的

 

@Bean@ConditionalOnMissingBeanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {    SqlSessionFactoryBean factory = new SqlSessionFactoryBean();    factory.setDataSource(dataSource);    factory.setVfs(SpringBootVFS.class);    if (StringUtils.hasText(this.properties.getConfigLocation())) {        factory.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));    }    org.apache.ibatis.session.Configuration configuration = this.properties.getConfiguration();    if (configuration == null && !StringUtils.hasText(this.properties.getConfigLocation())) {        configuration = new org.apache.ibatis.session.Configuration();    }    if (configuration != null && !CollectionUtils.isEmpty(this.configurationCustomizers)) {        Iterator var4 = this.configurationCustomizers.iterator();        while(var4.hasNext()) {            ConfigurationCustomizer customizer = (ConfigurationCustomizer)var4.next();            customizer.customize(configuration);        }    }......}

 

 开启驼峰命名

 

 

自定义MyBatis的配置规则

@Configurationpublic class MyBatisConfig {    @Bean    public ConfigurationCustomizer configurationCustomizer(){        return new ConfigurationCustomizer() {            @Override            public void customize(org.apache.ibatis.session.Configuration configuration) {                //开启驼峰命名发                configuration.setMapUnderscoreToCamelCase(true);            }        };    }}

此时可以封装到对象

 
关于mapper类特别多的情况:
如果mapper特别多的情况、每一个mapper类都是用@Mapper是极为麻烦的
 
此时可以使用
@MapperScan直接指定mapper的包,进行对mapper的类批量扫描
@MapperScan(value = "com.cr.mybatis.mapper")@SpringBootApplicationpublic class MybatisApplication {    public static void main(String[] args) {        SpringApplication.run(MybatisApplication.class, args);    }}

 

 

 

 

2)、配置文件的方式

这里的mybatis知识就不再多说了 直接上代码
 
首先写接口mapper类:
EmployeeMapper.java
@Repositorypublic interface EmployeeMapper {    public Employee getById(Integer id);    public void insertEmp(Employee employee);}

 

注意:这里的mapper接口需要使用@Mapper/@MapperScan进行扫描

mybatis配置文件:

mybatis-config.xml

 

 EmployeeMapper.xml

INSERT INTO employee(lastName,email,gender,d_id) VALUES (#{lastName},#{email},#{gender},#{dId})

 

 

工程配置文件
需要指定其配置问价的位置
#配置mybatis#mybatis的配置文件mybatis.config-location=classpath:mybatis/mybatis-config.xml#mapper的配置文件mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

 

 测试的controller类:

@ResponseBody@Controllerpublic class EmpTest {    @Autowired    EmployeeMapper employeeMapper;    //查询    @RequestMapping("/emp/{id}")    public Employee getEmp(@PathVariable("id") Integer id){        Employee emp = employeeMapper.getById(id);        return emp;    }    @RequestMapping("/emp")    public Employee insert(Employee employee){        employeeMapper.insertEmp(employee);        return employee;    }}

测试:

 

转载于:https://www.cnblogs.com/Mrchengs/p/10358025.html

你可能感兴趣的文章
linux发展历程。
查看>>
resin与log4j的配置
查看>>
我的友情链接
查看>>
长用小功能
查看>>
RHEl 5服务篇—部署Postfix邮件服务(二)配置邮件服务器的收、发信服务
查看>>
AD RMS 自我排错分析篇
查看>>
Kubernetes Deployment滚动更新场景分析
查看>>
多线程 3道题目 一
查看>>
我的友情链接
查看>>
c# 二维数组
查看>>
解决mx:AdvancedDataGrid表格中向上滚动导致数据混乱的非主流方法
查看>>
Buffer Cache内容强制写出到数据文件 alter system flush buffer_cache
查看>>
MicropPython的学习,如何从0到1?
查看>>
DNS(BIND) 服务器主从,实现高效率域名解析
查看>>
PHP 字符串变量
查看>>
Nginx+Lua环境安装
查看>>
Linuxshell快捷键
查看>>
three js相关的文档
查看>>
PHP获取和操作配置文件php.ini的几个函数
查看>>
83.LAMP设置默认主机
查看>>