Mybatis
第一个Mybatis程序
第一步:创建数据库
我用的sqlyog管理数据库
CREATE DATABASE `mybatis-study`; USE `mybatis-study`; CREATE TABLE `user` ( `id` INT 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, '李四', '123456' ), ( 3, '王五', '123456' )
第二步:创建maven项目
-
创建一个空的maven项目,删除src目录,作为父项目
-
在父项目下创建子项目
修改父项目的pom.xml文件:
<dependencies> <!-- mybatis --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <!--junit单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.29</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.26</version> </dependency> </dependencies>
在父项目导入jar包
<dependencies>
<!-- mybatis -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!--junit单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
</dependencies>
第三步:实现数据库连接
mybatis配置文件
用mybatis配置文件(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.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis-study?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- 每一个Mapper.xml都需要在MyBatis核心配置文件中注册--> <mappers> <mapper resource="com/chang/dao/UserMapper.xml"/> </mappers> </configuration>
第四步:获取数据库操作对象
编写mybatis工具类(MybatisUtils)
编写mybatis工具类,就是得到SqlSession对象,用sqlSession对象来操作数据库
mybatis工具类
package com.chang.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获取sqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } /** * 可以从SqlSessionFactory中获得 SqlSession 的实例 * SqlSession 提供了在数据库执行 SQL 命令所需的所有方法 * @return */ public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } }
第五步:编写实体类
编写实体类,实现与数据库字段匹配
实体类:和数据库字段匹配
编写实体类(User)
package com.chang.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; } /** * 获取 * @return id */ public int getId() { return id; } /** * 设置 * @param id */ public void setId(int id) { this.id = id; } /** * 获取 * @return name */ public String getName() { return name; } /** * 设置 * @param name */ public void setName(String name) { this.name = name; } /** * 获取 * @return pwd */ public String getPwd() { return pwd; } /** * 设置 * @param pwd */ public void setPwd(String pwd) { this.pwd = pwd; } public String toString() { return "User{id = " + id + ", name = " + name + ", pwd = " + pwd + "}"; } }
第六步:编写接口,实现接口
编写接口
接口(UserDao)
package com.chang.dao; import com.chang.pojo.User; import java.util.List; public interface UserDao { List<User> getUserList(); }
实现接口
mapper(相当于实现接口)
-
需要指定好对应的接口,这个mapper就相当于是接口的实现类
-
namespace中的包名要和Dao/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.chang.dao.UserDao"> <!-- select查询语句,ID对应方法名 --> <select id="getUserList" resultType="com.chang.pojo.User" > select * from user </select> </mapper>
第七步:编写测试类(UserDaoTest)
标准这样写:
package com.chang.dao; import com.chang.pojo.User; import com.chang.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserDaoTest { @Test public void test(){ //第一步:获取sqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); try { //getMapper UserDao mapper = sqlSession.getMapper(UserDao.class); List<User> userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); } }catch (Exception e){ e.printStackTrace(); }finally { //关闭sqlSession sqlSession.close(); } } }
也可以这样写
package com.chang.dao; import com.chang.pojo.User; import com.chang.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; 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); } //关闭sqlSession sqlSession.close(); } }
项目结构
第八步:单元测试
报错
原因应该是没有扫描到mapper文件,在父项目pom文件里面添加如下配置
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> </resources> </build>
更新maven,再测试