第一个Mybatis 程序
第一个Mybatis 程序
1.在数据库创建一张user表:
2.新建一个maven项目:
博客:https://www.cnblogs.com/love2000/p/14155577.html
3.导入pom依赖:
opm.xml 文件下:
<dependencies> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--Mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!--junit 单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
4.建立mybatis核心配置文件:
在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核心配置文件--> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <!--数据库驱动配置--> <!--数据库连接url配置 之前jdbc的& 符号这里是不能直接使用的 需要 & 进行转义--> <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&autoReconnect=true&failOverReadOnly=false"/> <property name="username" value="root"/> <!--数据库用户名--> <property name="password" value="1234"/> <!--数据库密码--> </dataSource> </environment> </environments> </configuration>
把上面的配置 复制进 mybatis-config.xml
5.编写mybatis工具类:
新建一个utils包来存放我们的工具类
在utils下新建一个MybatisUtils 来实现mybatis工具类
mybatis工具类要做两件事情:
1.获取SqlSessionFactory对象
2.返回SqlSession实例(SqlSession实例 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句)
package com.xiaofu.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 = null; static { try { //使用mybatis第一步:获取sqlSessionFactory对象 String resource = "org/mybatis/example/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了sqlSessionFactory,顾名思义,我们就可以从中获取SqlSession的实例了。 //SqlSession 完全包含了面向数据库执行sql 命令所需的所有方法 public static SqlSession getSqlSession(){ //返回 SqlSession 实例 /*全的写法是这样的 SqlSession sqlSession = sqlSessionFactory.openSession(); return sqlSession;*/ return sqlSessionFactory.openSession(); } }
将上面的代码复制进 MybatisUtils 。
6.编写数据库对应pojo实体类:
在pojo新建一个User类当实体类
package com.xiaofu.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; } //get和set方法 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; } //重写toString @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
上面是实体类的代码。
7.编写DAO接口:
在dao下新建一个UserDao(官方文档上要求取名为 .....Mapper 这里简单取名为UserDao方便理解)接口
UserDao代码:
package com.xiaofu.dao; import com.xiaofu.pojo.User; import java.util.List; public interface UserDao { //获取所有的用户 List<User> getUserList(); }
8.编写实现类:
在jdbc中实现类,需要继承它的接口,然后实现它 但在mybatis中只需要用 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"> <!--namespace= 绑定一个Dao/mapper接口--> <mapper namespace="com.xiaofu.dao.UserDao"> <!-- select查询语句 id是接口的方法名 resultType是返回的类型--> <select id="getUserList" resultType="com.xiaofu.pojo.User"> select * from text.user </select> </mapper>
9.junit测试:
在src下新建一个text 来做测试文件夹 后面的测试类也写成对应的目录结构
UserDaoText 代码:
package com.xiaofu.dao; import com.xiaofu.pojo.User; import com.xiaofu.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserDaoText { @Test public void text(){ //第一步:获取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(); } }
现在运行一下测试类:
就会发现报错了 他说没有找到 UserMapper.xml文件 这是在mybatis-config.xml 中没有注册我们写好的实现类mapper
来到mybatis-config.xml
注册写好的mapper实现类
UserMapper.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核心配置文件--> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <!--数据库驱动配置--> <!--数据库连接url配置 之前jdbc的& 符号这里是不能直接使用的 需要 & 进行转义--> <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&autoReconnect=true&failOverReadOnly=false"/> <property name="username" value="root"/> <!--数据库用户名--> <property name="password" value="1234"/> <!--数据库密码--> </dataSource> </environment> </environments> <!-- 每一个 mapper.xml 都需要在mybatis核心配置文件中注册 --> <mappers> <mapper resource="com/xiaofu/dao/UserMapper.xml"/> </mappers> </configuration>
再次运行:
还是找不到写好的UserMapper为什么呢?
查看生成的target文件就会发现 dao下面并没生成 UserMapper.xml 这是maven的资源导出问题 我们写好了的UserMapper并没有被导出 怎么解决呢?
<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>
要在pom.xml文件中加上 上面的代码 这样我们写的xml文件就会被识别了(如果有子项目也要在子项目中的pom.xml中加上这个)。
再次运行测试类:
可以看到 用户的数据已经被查出来了。