1、MyBatis框架入门案列
使用MyBatis框架、连接数据库,查询一张表数据,存放到List集合中。
2、搭建MyBatis开发环境
创建MYSQL数据库、表、创建Maven工程、在项目中创建实体类,Dao接口。
2.1、创建MYSQL数据库表
- 数据库名StudentManage、表名UserInfo
2.2、IDEA搭建项目工程
- 创建Maven工程、首先创建空工程、点击加号、添加Module
- 选择Maven、在骨架模板中选择quickstart、也就是Javase项目
- 填写名称和路径、路径选择空工程路径、在后边加上Maven名称
- 最后点击finish、OK,等待构建Maven项目成功即可。
- 整理pom.xml文件,删除name、url和build里边的内容、properties里边的版本从1.7改为1.8
- 在dependencies、build里边加入依赖、如下:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
- 点击刷新按钮、更新插件
- 新建包、创建实体类
public class UserInfo
{
//构造
private int id;
private String Name;
private int Age;
//get set tosting....
}
- 在Dao层创建接口
public interface UserInfoDao
{
List<UserInfo> selectAll();
}
- 创建和Dao层接口对应的Mapper映射文件UserInfoDao.xml、名称和接口名称要一样、当然,后缀名肯定不一样,上边接口中有查询所有数据的方法、那么映射文件里就应该有查询标签和对应的SQL语句,这样、Java代码和SQL语句就分开了。
<?xml version="1.0" encoding="UTF-8" ?>
<!--
http://mybatis.org/dtd/mybatis-3-mapper.dtd:指定约束文件、检查mapper标签里边的内容是否正确,必须符合mybatis的要求。
-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
mapper:当前文件的根标签、必须要有,所有操作都在这个标签里边进行。在当前文件中、可以使用特定的标签表示对数据库的操作。
namespace:命名空间、唯一值、推荐使用Dao接口全限定名称
-->
<mapper namespace="com.rg.dao.UserInfoDao">
<!--
select标签:完成查询操作、还可以是insert、update、delete。
id:该SQL语法的唯一标识,mybatis会根据id值,来执行对应的SQL语句、推荐使用接口中方法名称
resultType:sql语句返回值最终类型、这里虽然最后结果是集合、但是集合中存的是UserInfo
-->
<select id="selectAll" resultType="com.rg.entity.UserInfo">
select * from UserInfo
</select>
</mapper>
- 在项目src/main下创建resources目录,设置resources目录为resources root创建主配置文件:名称为 mybatis.xml、说明:主配置文件名称是自定义的,内容如下:
<configuration>
<settings>
<!--设置mybatis输出日志-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--配置mybatis环境、从environments是复数就可以看出、里边可以有多个-->
<environments default="mysql">
<!--数据源的名称-->
<environment id="mysql">
<!--配置事务类型、这里使用JDBC事务-->
<transactionManager type="jdbc"></transactionManager>
<!--数据源dataSource:创建数据库连接对象-->
<!--POOLED:使用连接池-->
<dataSource type="POOLED">
<!--连接数据库的四个要素-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/StudentManage"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--SQL映射文件的位置-->
<mappers>
<!--从classes下开始-->
mapper resource="com/rg/dao/UserInfoDao.xml"/>
</mappers>
</configuration>
- 最后、test包下创建测试类和测试方法、如下:
public void test01() throws IOException
{
//读取mybatis主配置文件
//路径也是以classes为根目录开始,mybatis是在classes的下边、所以可以直接写名字
String config = "mybatis.xml";
//读取配置文件、这样就可以读取到数据库的信息。
InputStream is = Resources.getResourceAsStream(config);
//创建SqlSessionFactory对象,目的是获取SqlSession
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//获取SqlSession对象,SqlSession能执行sql语句
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行SqlSession的selectList()
//com.rg.dao.UserInfoDao这个就是映射文件里边根标签mapper的命名空间、selectAll就是里边查询标签的id值
//通过命名空间加id值,执行对应的SQL语句。
List<UserInfo> userList = sqlSession.selectList("com.rg.dao.UserInfoDao.selectAll");
//循环输出集合中的结果
userList.forEach(x -> System.out.println(x));
//关闭selectList,释放资源
sqlSession.close();
}
编译一下、运行测试方法、这样、UserInfo这样表的所有数据就输出在控制台了。
- 其中
List<Student> studentList =session.selectList("com.rg.dao.StudentDao.selectAll");
近似等价的 jdbc 代码
Connection conn = 获取连接对象
String sql=” select * from UserInfo
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();