mybatis第二天学习笔记
1.简介
1.1、如何获得mybatis
-
maven仓库:
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency>
-
Github:https://github.com/mybatis/mybatis-3/releases
-
mybatis中文文档:https://mybatis.org/mybatis-3/zh/index.html
1.2、持久化
数据持久化
-
持久化就是将程序的数据在持久状态和瞬时状态转化的过程
-
内存:断电即失
-
数据库(jdbc),io文件持久化。
-
生活中例子:冷藏,罐头……
为什么需要数据持久化?
- 有一些对象,绝对不能让它丢失
- 内存太贵了,
1.3、持久层
Dao层,Service层,Controler层
- 完成持久化工作的代码块
- 层界限十分明显
1.4、为什么需要mybatis?
- 传统的JDBC代码太复杂了——简化——框架——自动化
- 帮助程序员将数据存入到数据库中
- 不用mybatis也可以,当学了之后,更容易上手。技术没有高低之分
- 优点:
最重要的一点:使用的人多
2、第一个mybatis程序
思路:搭建环境–>导入mybatis–>编写代码–>测试
2.1、搭建环境
- 搭建数据库
CREATE DATABASE `mybatis`;
USE `mybatis`;
CREATE TABLE `user`(
`id` INT(20) NOT NULL PRIMARY KEY,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT NULL
)ENGINE = INNODB DEFAULT CHARSET = utf8;
INSERT INTO `user`(`id`,`name`,`pwd`)
VALUES (1,'一北','123456'),
(2,'张三','123121'),
(3,'李四','121216')
- 新建项目
-
新建一个普通的maven项目
-
删除src目录,将其当作一个父工程
-
导入maven依赖
<!-- 导入依赖--> <dependencies> <!-- mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> <!-- mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency> <!-- junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
2.2、创建一个项目
-
编写mybatis的核心配置文件
<?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 核心配置文件--> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
-
编写mybatis的工具类
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
//使用mybatis第一步获取sqlSessionFactory对象
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
2.3、编写代码
- 实体类
public class User {
private int id;
private String name;
private 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 getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public User() {
}
}
- Dao接口
public interface UserDao {
List<User> getUserList();
}
- 接口实现类 — 由原来的UserDaoImpl改变为Mapper配置文件
<?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">
<!--namespace=绑定一个对应的Dao/mapper接口-->
<mapper namespace="com.bei.dao.UserDao">
<select id="getUserList" resultType="com.bei.pojo.User">
select * from mybatis.user
</select>
</mapper>
2.4、测试
-
junit测试
public class UserDaoTest { @Test public void test(){ //第一步:获得SqlSession的对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //第二步:执行sql UserDao mapper = sqlSession.getMapper(UserDao.class); List<User> userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); } //关闭sql sqlSession.close(); } }
org.apache.ibatis.binding.BindingException: Type interface com.bei.dao.UserDao is not known to the MapperRegistry.
-
MapperRegistry是什么
在核心配置文件中注册mappers
-
maven导出资源问题
<!--在build中配置resources,来防止我们资源导出失败的问题--> <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>
-
配置
driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC" name="root" password="abc123"
3、CRUD
- id:就是对应namespace 中的方法名
- resultType:sql语句执行的返回值
- parameterType:参数类型
-
编写接口
//查询全部用户 List<User> getUserList();
-
编写对应的mapper中的sql语句
<select id="getUserList" resultType="com.bei.pojo.User" > select * from mybatis.user; </select>
-
测试
@Test public void getUserList(){ //第一步:获得SqlSession的对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //第二步:执行sql UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); } //关闭sql sqlSession.close(); }
-
注意
增删改需要提交事务:sqlSession.commit();