ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何从MyBatis学习-使用Druid连接池将Maybatis整合到spring 的方法

2020-08-18 06:03:56  阅读:415  来源: 互联网

标签:String runoob spring Druid id mysql MyBatis public


目录
前言
什么是Druid连接池
Druid可以做什么?
导入库包
连接oracle
连接mysql
导入mybatis
导入druid
导入spring-jdbc包
导入spring包
导入spring事务相关包
导入mybatis-spring整合包
配置
数据库配置
druid配置
添加一个dto
在数据库中添加表
创建mapper
添加入库的单元测试
通过MapperScannerConfigurer减少配置
新增一个student表
添加studentdto
添加studentdao
添加studentmapper.xml
添加单元测试
参考文献

前言
在MyBatis学习-连接oracle实现CURD操作实现了MyBatis基本配置与CRUD操作。但是每次都是手工创建SqlSessionFactory本篇将通过spring来管理bean,同时使用Druid连接池替换自带的连接池。
什么是Druid连接池
Druid是一个JDBC组件,它包括三部分:
DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。
DruidDataSource 高效可管理的数据库连接池。
SQLParser
Druid可以做什么?
可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。
导入库包
连接oracle
如果我们要连接oracle数据库,需要导入oralce的jdbc的包。但是由于oracle收费, 因此maven没有oracle库包,需要我们自己手工导入外部包。或者也可以将oracle的jar导入到maven库中。具体导入步骤可以查看Maven添加Oracle的依赖及驱动
导入外部包。或者也可以将oracle的jar导入到maven库中。具体导入步骤可以查看Maven添加Oracle的依赖及驱动

com.oracle.jdbc
ojdbc6
11.2.0.1.0

连接mysql
由于mysql是免费的,我们可以通过maven直接安装mysql的jdbc数据库连接包

mysql
mysql-connector-java
8.0.21

导入mybatis

org.mybatis
mybatis
3.5.5

导入druid

com.alibaba
druid
1.1.11

导入spring-jdbc包

org.springframework
spring-jdbc
5.2.8.RELEASE

导入spring包

org.springframework
spring-context
5.2.8.RELEASE

导入spring事务相关包

org.springframework
spring-tx
5.2.8.RELEASE


org.springframework
spring-jdbc
5.2.8.RELEASE

导入mybatis-spring整合包

org.mybatis mybatis-spring 1.3.1 配置 下面使用过mysql数据库为例。 数据库配置 在resources目录下新建一个mysql.properities文件,用于配置连接数据库的相关配置。 druid.url=jdbc:mysql://localhost:3306/mysql?serverTimezone=UTC #这个可以缺省的,会根据url自动识别 druid.driverClassName=com.mysql.cj.jdbc.Driver druid.username=root druid.password=123456

初始连接数,默认0

druid.initialSize=10

最大连接数,默认8

druid.maxActive=30

最小闲置数

druid.minIdle=10

获取连接的最大等待时间,单位毫秒

druid.maxWait=2000

缓存PreparedStatement,默认false

druid.poolPreparedStatements=true

缓存PreparedStatement的最大数量,默认-1(不缓存)。大于0时会自动开启缓存PreparedStatement,所以可以省略上一句设置

druid.maxOpenPreparedStatements=20
druid配置
在resources目录下新建一个applicationContext-mysql.xml文件,用于配置mysql的druid的数据库连接池配置以及注入到spring的bean。
数据源的配置从mysql.propertie获取的

<context:property-placeholder location="classpath:mysql.properties" />
<!--druid连接池-->
spring管理事务 根据mapper生成代理 sqlSessionFactory需要注入数据源和配置文件路径,spring会生成runoob_tblMapper,我们通过这个值取bean就能对数据库进行操作了。 完整配置如下 添加conf.xml 配置映射的文件

在resources/mapper下添加runoob_tblMapper.xml

insert into runoob_tbl(runoob_title, runoob_author, submission_date) values(#{runoob_title},#{runoob_author},#{submission_date}) 添加一个dto 在mysql.dto添加类

public class runoob_tbl {

public  String runoob_id;
public  String runoob_title;
public  String runoob_author;
public Date  submission_date;
@Override
public String toString() {
    return this.runoob_id + "," + this.runoob_title + "," + this.runoob_author + "," + this.submission_date;
}

public String getRunoob_id() {
    return runoob_id;
}

public void setRunoob_id(String runoob_id) {
    this.runoob_id = runoob_id;
}

public String getRunoob_title() {
    return runoob_title;
}

public void setRunoob_title(String runoob_title) {
    this.runoob_title = runoob_title;
}

public String getRunoob_author() {
    return runoob_author;
}

public void setRunoob_author(String runoob_author) {
    this.runoob_author = runoob_author;
}

public Date getSubmission_date() {
    return submission_date;
}

public void setSubmission_date(Date submission_date) {
    this.submission_date = submission_date;
}

}
在数据库中添加表
create table runoob_tbl
(
runoob_id int unsigned auto_increment primary key,
runoob_title varchar(100) not null,
runoob_author varchar(40) not null,
submission_date date null
)charset = utf8;
创建mapper
在mysql.dao添加runoob_tblMapper.java
这个接口名需要和runoob_tblMapper配置的命名空间一致

public interface runoob_tblMapper {
int insert(runoob_tbl tbl);
}

添加入库的单元测试
需要在pom引入junit包

junit
junit
4.12
test

添加ruidmybatistest单元测试,插入一条记录。

public class ruidmybatistest {

@Test
public void testGetUserList(){
    try
    {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-mysql.xml");
        runoob_tblMapper mapper = ctx.getBean("runoob_tblMapper",runoob_tblMapper.class);
        runoob_tbl tbl = new runoob_tbl();
        tbl.setRunoob_author("jake");
        tbl.setRunoob_title("redis");
        tbl.setSubmission_date(new Date());
        int count =  mapper.insert(tbl);
        System.out.println(count);
    }catch (Exception exception)
    {
        System.out.println(exception.getMessage());
    }
}

}
通过MapperScannerConfigurer减少配置
通过上面配置,每个mapper都需要配置bean,若mapper比较多,配置的就很麻烦,可以通过MapperScannerConfigurer实现自动扫描,而无需配置mapper了
在sqlSessionFactory添加一个mapperLocations属性,映射mapper下所有Mapper结尾的配置。





新增一个student表
create table student
(
name varchar(32) null,
age int null,
id int auto_increment,
constraint student_pk
primary key (id)
);
添加studentdto

public class student {

public  String id;
public  String name;
public  int age;
@Override
public String toString() {
    return this.id + "," + this.name + "," + this.age;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}

}
添加studentdao

public interface studentMapper {
List<runoob_tbl> selectByNames(List name);
}

添加studentmapper.xml
在resources/mapper下添加studentmapper.xml

<select id="selectByNames" resultType="mysql.dto.student">
      select * from student where name in
      <foreach item="name" index="index" collection="list" open="(" separator="," close=")">#{name}</foreach>

标签:String,runoob,spring,Druid,id,mysql,MyBatis,public
来源: https://www.cnblogs.com/whathell/p/13521212.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有