用于记录mybatis学习过程
推荐使用idea
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>com.wen</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>mybatis-01</module>
</modules>
<!--导入依赖-->
<dependencies>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version><!--这里mysql驱动器的版本需要和你本地的mysql版本相匹配,不然会报错-->
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version><!--根据所需要的指定-->
</dependency>
<!--junit,用于测试用的工具类,后续的@Test-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version><!--根据所需要的指定-->
</dependency>
</dependencies>
<!--这里比较关键,为的是防止资源无法被导出的问题,识别xml配置文件-->
<build>
<resources>
<resource>
<directory>src/main/resource</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
三、在resources文件夹下配置mybatis的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"><!--这里可以有多个环境,可根据id来选择,上面有默认-->
<transactionManager type="JDBC"/>
<dataSource type="POOLED"><!--这里的参数,池子,不需要往复的创建-->
<property name="driver" value="${driver}"/><!--这里使用${driver},后续可以再通过配置文件来读取数据!!-->
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
对比参照
<?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"></transactionManager><!--使用的是jdbc驱动器-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/><!--这里就使用jdbc的驱动-->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&allowPublicKeyRetrieval=true"/><!--url配置,根据实际需要填写-->
<property name="username" value="root"/><!--用户名-->
<property name="password" value="root"/><!--密码-->
</dataSource>
</environment>
</environments>
<!--这里是重点!每配置一个xml文件就需要将其注册到mapper中!!不然无法找到文件-->
<mappers>
<mapper resource="com/wen/dao/UserMapper.xml"></mapper>
</mappers>
</configuration>
通过db.properties文件来配置数据库信息的方式!
这里不需要log4j.properties,下文以注释,需要日志时再自行配置
与上面进行对比
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>
<!-- 引入外部配置文件-->
<properties resource="db.properties"></properties>
<settings>
<!-- 日志!-->
<!-- <setting name="logImpl" value="STDOUT_LOGGING"/>-->
<!--<setting name="logImpl" value="LOG4J"/>-->
</settings>
<typeAliases>
<!-- <typeAlias type="com.wen.pojo.User" alias="User"></typeAlias>-->
<package name="com.wen.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/wen/dao/UserMapper.xml"></mapper>
</mappers>
</configuration>
db.properties:
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf-8
username = root
password = root
这样就只用更改db.properties中的数据库配置信息就可以了,而不需要去更改mybatis-config.xml文件中的内容
四、建立一个简单的测试
我的文件目录:
dao层: dao层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个dao一定是和数据库的某一张表相对应的,其中封装了增删改查基本操作,属于接口类,建立一个dao就需要建立一个相应的xml配置文件。
pojo层: 俗称对象层,用于存放具体需要操作和返回的对象,与dao层中的相应dao文件相对应。
utils层: 存放工具类
1.MybatisUtils
扫描二维码关注公众号,回复:
15195054 查看本文章
package com.wen.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;
//sqlSessionFactory --->sqlSession
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;//提升作用域
static {
try {
// 使用Mybatis第一步:获取SQLSessionFactory对象
String resource = "mybatis-config.xml";//获取的mybatis的配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
2.UserDao
package com.wen.dao;
import com.wen.pojo.User;
import java.util.List;
public interface UserDao{
List<User> getUserList();
}
3.UserMapper.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">
<mapper namespace="com.wen.dao.UserDao"><!--这里namespace的路径要和UserDao相对应-->
<select id="getUserList" resultType="com.wen.pojo.User"><!--resultType可以直接返回给出的返回值类型,比如String、int、Map,等等,其中返回List也是将返回类型定义为Map,然后mybatis会自动将这些map放在一个List中,resultType还可以是一个对象-->
<!--id是方法的名字-->
select *from mybatis.user
</select>
</mapper>
4.User
package com.wen.pojo;
//实体类
public class User {
//这里定义变量和数据库中表格一样
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.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 getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
5.mysql表
6.测试类:
package com.wen.dao;
import com.wen.pojo.User;
import com.wen.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
public class UserDaoTest {
@Test
public void getUserLike(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userList = mapper.getUserLike("%李%");
for (User user:userList){
System.out.println(user);
}
sqlSession.close();
}
@Test
public void test(){
// 1.获得sqlSession
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 2.执行sql,方式一
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userList = mapper.getUserList();
for (User user: userList){
System.out.println(user);
}
// 3.关闭SqlSession
sqlSession.close();
}
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
User userById = mapper.getUserById(1);
System.out.println(userById);
sqlSession.close();
}
@Test
public void getUserById2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
HashMap<String, Object> map = new HashMap<String,Object>();
map.put("id",1);
map.put("name","狂神");
User userById2 = mapper.getUserById2(map);
System.out.println(userById2);
sqlSession.close();
}
//增删改需要提交事物!!
@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
int res = mapper.addUser(new User(4,"哈哈哈", "123"));
if (res>0){
System.out.println("插入成功");
}
// 提交事物
sqlSession.commit();
sqlSession.close();
}
@Test
public void addUser2(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
// map
HashMap<String, Object> map = new HashMap<>();
map.put("userId",5);
map.put("userName","hello");
map.put("userPwd","121212");
mapper.addUser2(map);
sqlSession.commit();
sqlSession.close();
}
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
int res = mapper.updateUser(new User(4,"呵呵","666"));
if (res>0){
System.out.println("更新成功!!");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
int res = mapper.deleteUser(4);
if (res>0){
System.out.println("删除成功!");
}
sqlSession.commit();
sqlSession.close();
}
}
7.执行结果
Talk is cheap,show me the code! —— 薪火工作室!