文章目录
1、Mybatis解析
1.1、UserMapper.xml解析
1、namespace的值是UserMapper的包类名
2、select->id:对应namespace中的类里的方法名
3、resultType是sql语句执行的返回值类型
4、parameterType表示传递到sql语句里参数的类型
1.2、增删改 实例
增删改需要提交事物
1、增加一个用户 实例
先在UserMapper接口里面定义方法
再到UserMapper.xml里面写sql
<insert id="addUser" parameterType="int">
insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>
测试插入一条数据
@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int res = mapper.addUser(new User(4, "王五", "121212"));
if (res>0){
System.out.println("返回结果大于0,表示插入成功");
}
// 增删改需要提交事物
sqlSession.commit();
sqlSession.close();
}
注意这几个名字一一对应
2、改 实例
UserMapper.java
UserMapper.xml
测试
3、删 实例
UserMapper.java
UserMapper.xml
测试
1.3、使用map类型插数据
适用于字段比较多的表
UserMapper.java
UserMapper.xml
测试

1.4、需要注意的问题
1.5、使用sql中的like
like模糊查询
UserMapper.java
UserMapper.xml
测试
这个%,除了可以写在使用的时候,还可以写在sql里
UserMapper.xml
测试
1.6、mybatis-config.xml解析
1、mybatis可以配置多套环境(但每次只能使用一套环境)
2、事物管理器(有JDBC、MANAGED这两种)
这里基本只用jdbc
3、数据源
有UPOOLED、POOLED、JNDIT,这几个选项,默认使用的是POOLED
4、xml引入外部配置文件(mysql连接)
5、properties属性
外部文件的用户名密码,优先级比属性里的高
6、 typeAliases 类型的别名
typeAliases必须写在properties下面,environments上面
下面为user类起一个别名(mybatis-config.xml)
在UserMapper.xml里面使用别名
除了以上直接给类起别名以外,
还可以扫描一个包,包下所有的类就有默认别名了,
默认别名为类名(首字母小写)
除了使用默认别名外,还可以用注解起别名
在实体类上加一个注解
除了自己写的类有别名,默认支持了一些类的别名
具体有那些见 (类型别名(typeAliases)):https://mybatis.org/mybatis-3/zh/configuration.html
7、mappers映射器
方式一:
这个映射器绑定mapper配置文件
方式二:
除了这种绑定方式,还可以通过class文件绑定
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="com.haha.dao.UserMapper.xml"/>
</mappers>
但是如上配置会涉及几个问题:
1、接口文件必须和他的Mapper文件同名
2、接口文件必须和他的Mapper文件在同一包下
方式三:
直接扫描包
<!-- 包扫描 -->
<mappers>
<mapper class="com.haha.dao"/>
</mappers>
需要注意的地方也是这两个
1、接口文件必须和他的Mapper文件同名
2、接口文件必须和他的Mapper文件在同一包下
1.7、mybatis插件
mybatis插件有很多,有一些可以自动实现很多功能,比如增删改查
1.8、属性和字段不一致问题、resultMap结果集映射
示例:
解决办法:
第一种,在sql里面起别名
第二种,利用结果集映射resultMap
1.9、不用一个一个注册mapper的写法
mybatis-config.xml
2、Mybatis 日志、log4j
Mybatis 内置的日志工厂,委托给下面的实现之一:
SLF4J
Apache Commons Logging
Log4j 2
Log4j
JDK logging
STDOUT_LOGGING (默认标准日志工厂,不需要导包可用)
使用日志工厂的时候需要导包
在mybatis-config.xml里面配置日志功能
(必须写在properties和typeAliases中间)
2.1、Mybatis标准的日志工厂
mybatis-config.xml :
2.2、log4j日志工厂
先的导入log4j的包
pom.xml
添加log4j的配置文件
log4j.properties
这个配置文件可以百度找一个,然后自己修改
log4j的简单使用
导包应导:import org.apache.log4j.Logger;
log4j对象:static Logger logger = logger.getLogger(UserDaoTest.class)这里UserDaoTest是当前类名
打印不同级别的日志
测试类:
3、mybatis分页
3.1、limit分页(sql实现分页)
sql里limit的用法
# 查前两条数据
select × from user limit 2;
# 查0到2条数据
select × from user limit 0,2;
注意limit后面不能跟-1,这个bug已经被修复了
mybatis分页实现
UserMapper.java
UserMapper.xml
测试
3.2、RowBounds分页(java代码实现分页)
UserMapper.java
UserMapper.xml
测试
另外,除了这种实现方式还可以使用分页插件mybatis PageHelper
4、mybatis使用注解开发
一般简单的sql语句才用注解开发,复杂的还是要用xml来配置
4.1、新建mybatis项目(步骤整理)
新建主项目
新建子模块
修改maven地址
主项目pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>zhu</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>zhi</module>
</modules>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<!-- 当maven里配置文件不生效时,添加如下配置-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/×.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/×.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
修改子项目pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Mybatis-Study</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mybatis-o1</artifactId>
<!-- 当maven里配置文件不生效时,添加如下配置-->
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/×.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/×.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
在resources文件夹下,新建mybatis-config.xml
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
建库、建表
# 建库
CREATE DATABASE mybatis;
# 使用库
USE mybatis;
# 建表
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(30) CHARACTER SET latin1 DEFAULT NULL,
`pwd` varchar(30) CHARACTER SET latin1 DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
# 插入数据
INSERT INTO 'user'('id','name','pwd') VALUES
(1, '猪小明','111111'),
(2,'妹大爷','123456'),
(3,'张三','000000')
新建实体类User.java ( 包com.haha.pojo下 )
package com.haha.pojo;
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPed() {
return pwd;
}
public void setPed(String ped) {
this.pwd = ped;
}
}
新建接口UserMapper.java ( 在com.haha.dao 包下)
package com.haha.dao;
import com.haha.pojo.User;
public interface UserMapper {
}
新建MybatisUtils.java(在com.haha.utils包下)
package com.haha.utils;
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 java.io.IOException;
import java.io.InputStream;
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 第一句:加载配置文件 mybatis-config.xml , 第二句:构建sql会话
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
// 返回 封装有执行sql方法的对象
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
项目目录结构
和之前那个mybatis项目相比少了UserMapper.xml
因为这个项目我们要使用注解,所以就不需要这个文件了
4.2、使用注解开发
UserMapper.java
@Select("select * from user")
List<User> getUsers();
到mybatis-config.xml里面绑定接口
<mappers>
<mapper class="com.haha.dao.UserMapper" />
</mappers>
新建测试类UserMapperTest.java
import com.haha.dao.UserMapper;
import com.haha.pojo.User;
import com.haha.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserMapperTest {
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUsers();
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
}
运行测试类
解析
4.3、注解:增删改查
UserMapper.java
4.4、不手动提交的方式
在工具类里面,这里写个true就不用手动提交了
使用的时候就不用写commit( )了
4.5、关于@Param( )
- 基本类型的参数或者String类型,需要加上
- 引用类型不需要加
- 只有一个基本类型可以不用加
4.6、#{}与${}
在sql语句中这两个都可以使用,有一点区别就是#{ }可以防止sql注入,${ }不能
5、maven的settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 本地仓库位置 -->
<localRepository>/home/Documents/maven/maven-home</localRepository>
<pluginGroups></pluginGroups>
<proxies></proxies>
<servers>
<server>
<id>deploymentRepo</id>
<username>repouser</username>
<password>repopwd</password>
</server>
</servers>
<mirrors>
<!-- 国内maven镜像 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles></profiles>
</settings>
6、lombok插件
相当于是一个懒人插件,使用它可以自动生成get、set方法等,利用注解实现。
这个插件基本不用,因为idea已经可以为我们自动生成get、set等方法,这里看看就好
6.1、idea配置lombok
安装完成就可以使用了
6.2、导入依赖
在主项目或者子项目的pom.xml中导入lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
手动更新依赖
6.3、使用
新建一个实体类User2.java
package com.haha.pojo;
import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User2 {
private int id;
private String name;
private String pwd;
}
如上这个实体类就和我们之前写的User.java功能是一样的
6.4、常用注解
7、新版idea需要手动更新项目
新版idea在maven项目pom.xml里添加dependency后,需要手动更新
我的idea版本