Mybatis快速上手教程
Contents
一 准备工作
1新建maven工程

项目名称:mybatis-project,GroupId:com.knockatdatabase;ArtifiactId:mybatis-project;Version:1.0-SNAPSHOT
2导入依赖
分别导入mybatis、MySQL,log4j,Junit的相关依赖。
在项目的pom.xml文件中,添加对应的依赖和版本号。如果不清楚的话,可以到maven的中央仓库「https://mvnrepository.com/」去搜索,然后把对应的GAV填入到配置文件中去。
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
</dependencies>3创建MySQL数据库和表
登录到数据库服务器,并创建响应的库和用户:
创建数据库、用户、授权:
[mysql@ppasdev ~]$ mysql -h localhost -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2563 Server version: 5.6.32-log MySQL Community Server (GPL) mysql> create database mybatis_project character set utf8 collate utf8_bin; Query OK, 1 row affected (2.08 sec) mysql> create user 'mybatis_project'@'%' identified by 'mybatis_project'; Query OK, 0 rows affected (0.21 sec) mysql> grant all privileges on mybatis_project.* to 'mybatis_project'@'%' with grant option; Query OK, 0 rows affected (0.02 sec) mysql> flush privileges; Query OK, 0 rows affected (0.07 sec) mysql>
建表:
[mysql@ppasdev ~]$ mysql -h localhost -umybatis_project -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2564 Server version: 5.6.32-log MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use mybatis_project; Database changed mysql> create table tbl_employee(id int(11) primary key auto_increment,last_name varchar(50),gender char(1),email varchar(30)); Query OK, 0 rows affected (1.37 sec) mysql> show tables; +---------------------------+ | Tables_in_mybatis_project | +---------------------------+ | tbl_employee | +---------------------------+ 1 row in set (0.00 sec) mysql> desc tbl_employee; +-----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | last_name | varchar(50) | YES | | NULL | | | gender | char(1) | YES | | NULL | | | email | varchar(30) | YES | | NULL | | +-----------+-------------+------+-----+---------+----------------+ 4 rows in set (0.47 sec) mysql>
4 新建Java类
根据数据库的表,创建Java bean对应的实体类。
package com.knockatdatabase;
/**
* @Author:asher
* @Date:2021/9/28 12:21
* @Description:com.knockatdatabase
* @Version:1.0
*/
public class Employee {
private Integer id;
private String lastName;
private String gender;
private String mail;
//getter、setter、toString略
}顺便添加getter和setter方法,由IDEA自动帮我们生成,同时重写toString()。
二配置mybatis
1 添加mybatis-config.xml文件
在项目工程下,main路径下,右键New –>选择Directory,选择resources,然后再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="${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>其中,该文件可以从mybatis官方文档PDF里获取,PDF文件可以随着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>
<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://172.16.11.35:3306/mybatis_project"/>
<property name="username" value="mybatis_project"/>
<property name="password" value="mybatis_project"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>2同样是在resources下添加SQL mapper文件
这里的mapper文件暂时命名为Employee.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="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>当然,该文件依然是从mybatis官方文档里获取的模板文件。这里根据实际情况修改为:
<?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.knockatdatabase.Employee">
<select id="selectEmployee" resultType="com.knockatdatabase.Employee">
select * from tbl_employee where id = #{id}
</select>
</mapper>将其中的namespace做对应修改,该命名空间的作用是用于定位SQL文件的;
然后修改其中的id为selectEmployee,这样,将来就可以通过namespace+id这两个值唯一的定位到这个唯一SQL语句;
resultType:根据实际情况,改为com.knockatdatabase.Employee,即,这个SQL语句的返回结果类型是com.knockatdatabase.Employee类的对象;
同时要注意,该SQLmapper配置文件写好之后,要将mybatis-config.xml中的mapper文件指向该文件,而不是之前的官方文档的默认配置,修改后的内容为:
<mappers>
<mapper resource="Employee.xml"/>
</mappers>3创建测试类EmployeeTest
新建,com/knockatdatabase/EmployeeTest.java其中的内容,依然是根据mybatis官方PDF文件修改的,修改后的内容为:
package com.knockatdatabase;
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 java.io.IOException;
import java.io.InputStream;
/**
* @Author:asher
* @Date:2021/9/28 19:45
* @Description:com.knockatdatabase
* @Version:1.0
*/
public class EmployeeTest {
@Test
public void test() throws IOException {
//1读取配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//2根据配置文件,创建1个SqlSessionFactory类的对象
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
//3根据SqlSessionFactory的对象,新建一个SqlSession类的对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//4调用SqlSession的方法selectOne(),返回Employee类的对象
Employee e = sqlSession.selectOne("selectEmployee", 1);
System.out.println(e);
}
}
//执行结果:
Employee{id=1, lastName='null', gender='1', mail='null'}从上述的执行结果看到,只有id和gender返回了正确的值,其它2个字段都是NULL。怎么办?
4修改SQL mapper文件
原因就是因为SQL语句中的返回字段名,和Java bean中定义的字段名不一致。我们把SQL语句中的字段取个别名,使其跟Java bean中的字段保持一致即可解决问题:
<?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.knockatdatabase.Employee">
<select id="selectEmployee" resultType="com.knockatdatabase.Employee">
select id,last_name as lastname,gender,email as mail from tbl_employee where id = #{id}
</select>
</mapper>最后,重新执行结果为:
Employee{id=1, lastName='Huang', gender='1', mail='3dian14@gmail.com'}三 小结
1阅读官方文档十分必要,这里根据官方文档就可以快速搭建一个机遇mybatis的快速上手环境,并且可以顺利执行;
2Java基础知识也很重要,之前跟着其他教程做,遇到诸如EmployeeTest.java文件中的:
//1读取配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//2根据配置文件,创建1个SqlSessionFactory类的对象
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
//3根据SqlSessionFactory的对象,新建一个SqlSession类的对象
SqlSession sqlSession = sqlSessionFactory.openSession();就懵了,傻了,等把Java基础知识过一遍之后,再回来看这些,就顺利多了,不再卡壳了。尤其是泛型、接口等知识。
3硬着头皮在项目组写了一点儿前后端程序,现在回过头来弥补一下mybatis的基础和原来,就舒服多了;
4不是不会,不是太难,实在是练习的太少了,看的少,懂的自然就少,起步就自然慢了。加油吧。
一条评论
Pingback: