MyBatis初体验
本项目所有源代码都以上传至我得码云上 ----> 码云(点击即可跳转)
1.简介:
- MyBatis是一个持久层框架
- 优点:1.简单易学;2.灵活;3.接触sql与程序代码之间的耦合;4.提供xml标签,支持编写动态sql
2.我的第一个MySql程序
- 思路:搭建环境—>导入MyBatis—>编写代码—>测试
- 基于:jdk 1.8
- mysql 8.0.17
- maven 3.6.3
- idea 2020.1
2.1搭建环境
本项目所有源代码都以上传至我得码云上 ----> 码云(点击即可跳转)
1.搭建数据库
mysql> create database mybatis; #创库
mysql> use mybastis; #进入数据库
mysql> create table user( #创建表
-> id int(20) not null,
-> name varchar(30) default null,
-> pwd varchar(30) default null,
-> primary key(id)
-> );
mysql> insert into user(id,name,pwd) #插入数据
-> values(1,'张三','12345'),
-> (2,'李四','12345'),
-> (3,'王五','12345');
mysql> select * from user; #查询
2.在idea中创建maven项目
删除src,创建父项目
导入maven依赖
2.2创建一个模块
- 编写mybatis核心文件
<!--核心配置文件-->
<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?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="101599"/>
</dataSource>
</environment>
</environments>
- 编写mybatis的工具类
/**
* 工具类
* sqlSessionFactory --> sqlSession 工厂模式
*/
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory; //提升作用域
static { //初始化时加载
try {
//使用mybatis第一步
//使用mybatis获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch(Exception e){
e.printStackTrace();
}
}
//既然有了SqlSessionFactory,顾名思义。我们就可以从中获得SqlSession的实例
//sqlSession完全包含了面向数据库执行的sql命令所需的方法
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
3.编写代码
使用接口实现类
- 实体类
package per.dh.pojo;
//实体类
public class User {
private int id;
private String name;
private String pwd;
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public User() {
}
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 + '\'' +
'}';
}
}
- 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="per.dh.dao.UserDao">
<!-- select:查询语块, id:重新方法的名称-->
<select id="getUserList" resultType="per.dh.pojo.User">
select * from mybatis.user
</select>
</mapper>
4.测试
注意点:
报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project mybatis_01: There are test failures.
Please refer to D:\Git\gitCode\mybatis\mybatis_01\target\surefire-reports for the individual test results.
1.shou首先在核心配置文件中注册mapperrs:
<!-- 每一个Mapper.xml都需要在mybatis核心配置文件中注册-->
<mappers>
<mapper resource="per/dh/dao/UserMapper.xml"/>
</mappers>
2.其次在 pom.xml中添加:
<!--在build中配置resources,来防止我们资源导出失败问题-->
```xml<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>
- junit测试
public class UserDaoTest {
@Test
public void test(){
//1.获得Sqlsession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//方式一:getMapper
//2.执行SQL
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getUserList();
for(User user: userList){
System.out.println(user);
}
//关闭SqlSession
sqlSession.close();
}
}
- 最终成品
3. 可能会遇到的问题
本项目所有源代码都以上传至我得码云上 ----> 码云(点击即可跳转)
- 配置文件没有注册
<!-- 每一个Mapper.xml都需要在mybatis核心配置文件中注册-->
<mappers>
<mapper resource="per/dh/dao/UserMapper.xml"/>
</mappers>
- 绑定接口错误
<!-- select:查询语块, id:重新方法的名称-->
<select id="getUserList" resultType="per.dh.pojo.User">
select * from mybatis.user
</select>
- 方法名不对
- 返回类型不对
- 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>
本项目所有源代码都以上传至我得码云上 ----> 码云(点击即可跳转)