使用mybatis从数据库中通过User类的id查询出user
中文官网:www.mybatis.org/mybatis-3/zh/index.html
目标:使用mybatis从数据库中通过User类的id查询出user
介绍:优秀的持久层框架,支持定制化SQL、存储过程、高级映射。
Implement
1.新建Maven项目

2.导入Mybatis的jar包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| <dependencies> <!-- mybatis核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <!-- mysql驱动包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.29</version> </dependency> <!-- junit测试包 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <!-- 日志文件管理包 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.12</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.12</version> </dependency>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> <scope>provided</scope> </dependency> </dependencies>
|
3.User类
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import lombok.Data;
/** * @author hxr * @Classname User * @Description ToDo */
@Data public class User { private int id; private String name;
}
|
4.创建数据库

5.Mybatis全局配置文件
resource下新建config.properties和mybatis-config.xml
1 2 3 4
| jdbc.driver = com.mysql.jdbc.Driver jdbc.url = jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=UTF-8 jdbc.username = root jdbc.password = 123456
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| <?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>
<!-- 加载属性文件 --> <properties resource="config.properties"> <!--properties中还可以配置一些属性名和属性值 --> <!-- <property name="jdbc.driver" value=""/> --> </properties>
<!-- 全局配置参数,需要时再设置 --> <!-- <settings> </settings> -->
<typeAliases> <!-- 别名定义 --> <!-- 针对单个别名定义 type:类型的路径 alias:别名,类名不能写错 别名可以随便起,但最好规范--> <typeAlias type="xiaoruiit.mybatis_introduction.pojo.User" alias="user" /> <!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) --> <package name="xiaoruiit.mybatis_introduction.pojo" /> </typeAliases>
<!-- 和spring整合后 environments配置将废除 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理,事务控制由mybatis --> <transactionManager type="JDBC" /> <!-- 数据库连接池,由mybatis管理 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments>
<!-- 加载映射文件 --> <mappers> <!--通过resource方法一次加载一个映射文件 --> <!--注意这里的路径和xml文件 --> <mapper resource="UserMapper.xml" />
<!-- 批量加载mapper 指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载 --> <!-- 遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 --> <!-- 中上边规范的前提是:使用的是mapper代理方法 <package name="...." />-->
</mappers>
</configuration>
|
6.***Mapper.xml配置文件(sql语句)
resource下新建UserMapper.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?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="test">
<!-- 在映射文件中配置很多sql语句 --> <!-- 将sql语句封装到mappedStatement对象中,所以将id称为statement的id --> <!-- parameterType:指定输入参数的类型,这里指定int型 #{}表示一个占位符号 --> <!-- #{id}:其中的id表示接收输入的参数,参数名称就是id,如果输入 --> <!-- 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 --> <!-- resultType:指定sql输出结果的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 --> <!-- 表名要对,但是不区分大小写,resultType要写类名,同样不区分大小写 user对应mybatis-config里边的typeAliases别名属性--> <select id="findUserById" parameterType="int" resultType="user"> SELECT * FROM user WHERE id = #{id} </select> </mapper>
|
7.单元测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| 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 xiaoruiit.mybatis_introduction.pojo.User;
import java.io.IOException; import java.io.InputStream;
/** * @author hxr * @Classname UserTest * @Description ToDo */ public class UserTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException { // mybatis配置文件,这个地方的root地址为:resources,路径要对。 String resource = "mybatis-config.xml"; // 得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory; }
// 根据id查询用户信息,得到一条记录结果 @Test public void findUserByIdTest() throws IOException {
// 通过工厂得到SqlSession SqlSession sqlSession = this.getSqlSessionFactory().openSession();
// 通过SqlSession操作数据库 // 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数 // sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象
// selectOne查询出一条记录(这种很麻烦的!!!往后看看) //这里的参数test.findUserById,test为命名空间,要与user.xml中的对应起来, //同理,findUserById也要在user.xml中存在,不然都会报错
User user = sqlSession.selectOne("test.findUserById", 1);
System.out.println(user.getId()); System.out.println(user.getName()); // 释放资源 sqlSession.close(); } }
|
结果: