整合思路分析
- 单独使用 Mybatis
- MyBatis 整合 Spring - 有 Mapper 实现类
- MyBatis 整合 Spring - 没有 Mapper 实现类
- MyBatis 整合 Spring - Mapper 接口扫描
- MyBatis 整合 Spring -整合 JDBC 事务
- 整合 SpringMVC
01. 单独使用MyBatis框架
1.1.导入必须包
MyBatis下载方式:
https://jingyan.baidu.com/article/19020a0a773e5c529d284200.html
下载后,
选中的jar包,放在WebRoot–>WEB-INF–>lib下
再导入MySQL的驱动:
链接:https://pan.baidu.com/s/1cXSjclLwPPeNCFXdr-D7Jg
提取码:jxmg
刚刚导入的有 log4j,所以要有一个log4j的配置文件:
项目–>右键new–>Source Folder
新建一个叫 config 的目录(和src同级别的)
存放log4j的配置文件:log4j.properties(固定的,用来输出日志)
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=debug, stdout
1.2.建立数据库和表
这里用的是SQLyog(数据库相关请看之前的文章)
创建一个t_customer表:
CREATE TABLE t_customer(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20), gender CHAR(1),
telephone VARCHAR(20),
address VARCHAR(50)
);
1.3.建立实体类(Javabean)
项目–>src–>new一个包:com.domain
在该包下new一个class文件:Customer.java
(包名自行更换,以自己建的为准,get和set方法,用编译器生成(source–>Generate Getters and Setters))
package cn.sm1234.domain;
public class Customer {
private Integer id;
private String name;
private String gender;
private String telephone;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
1.4.建立 Mapper 接口
新建一个包:com.dao
在包里新建class文件:CustomerMapper.java
package cn.sm1234.dao;
import cn.sm1234.domain.Customer;
public interface CustomerMapper {
/**
* 添加客户
*/
public void saveCustomer(Customer customer);
}
1.5.建立 sql 映射文件
saveCustomer这个方法对应的语句在这里写
在config下新建一个包:mapper
在该包下放映射文件:
CustomerMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 该文件编写mybatis中的mapper接口里面的方法提供对应的sql语句 -->
<mapper namespace="cn.sm1234.dao.CustomerMapper">
<!-- 添加客户 -->
<insert id="saveCustomer" parameterType="cn.sm1234.domain.Customer">
INSERT INTO ssm.t_customer
(
NAME,
gender,
telephone,
address
)
VALUES
(
#{name},
#{gender},
#{telephone},
#{address}
)
</insert>
</mapper>
(注意:方法的名字要跟id相同;namespace要跟mapper的全名相同)
在SQLyog里,对着表右键–>粘贴SQL语句–>插入到表名,就会得到insert语句:
INSERT INTO `ssm`.`t_customer`
(`id`,
`NAME`,
`gender`,
`telephone`,
`address`
)
VALUES
('id',
'NAME',
'gender',
'telephone',
'address'
);
VALUES里面的,用在Javabean里面创建的变量来代替,就变成了上面带#{}的那种形式
1.6.建立 sqlMapConfig.xml 文件
sqlMapConfig.xml文件,放在config目录下,内容基本固定的,用模板就行
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- 查找sql映射文件 -->
<mappers>
<mapper resource="mapper/CustomerMapper.xml"/>
</mappers>
</configuration>
修改数据库的连接:
value="jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8" />
这一句,ssm这个位置要写的,视要连接的数据库名字而定
查找sql映射文件的路径要自己改
1.7.编写测试类
src下新建包:com.test
包里新建class:MyBatisTest.java
package cn.sm1234.test;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import cn.sm1234.dao.CustomerMapper;
import cn.sm1234.domain.Customer;
public class MyBatisTest {
@Test
public void test() throws Exception{
//1.创建SqlSessionFactoryBuilder
SqlSessionFactoryBuilder builer = new SqlSessionFactoryBuilder();
//加载sqlMapConfig.xml文件
InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
//2.创建sqlSessionFactory
SqlSessionFactory factory = builer.build(is);
//3.打开SqlSession
SqlSession sqlSession = factory.openSession();
///4.获取Mapper接口的对象
CustomerMapper customerMapper = sqlSession.getMapper(CustomerMapper.class);
//5.操作
Customer customer = new Customer();
customer.setName("小张");
customer.setGender("男");
customer.setTelephone("020-3333333");
customer.setAddress("广州天河城广场");
customerMapper.saveCustomer(customer);
//6.提交事务
sqlSession.commit();
//7.关闭资源
sqlSession.close();
}
}
run as JUnit Test,log4j会打印日志,去数据库看已经插入数据了: