Mybatis两种开发方式
Mybatis两种开发方式
1.xml开发:
1.全局配置文件
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>
|
properties配置数据库属性,可覆盖property,dataSource中的value需要增加jdbc前缀,否则可能读取到windows系统的配置
typeAliases配置别名
mappers配置mapper.xml所在位置
2.***Mapper接口,即dao
1 2 3
| public interface UserMapper { User findUserById(int id); }
|
3.***Mapper.xml
namespace对应***Mapper接口所在路径
id对应Mapper接口方法名
parameterType对应Mapper接口的参数类型
resultType对应Mapper接口的返回值类型,可以使用全局配置文件的别名typeAliases
1 2 3 4 5 6 7 8 9
| <?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="xiaoruiit.mybatis_introduction.dao.UserMapper"> <select id="findUserById" parameterType="int" resultType="user"> SELECT * FROM user WHERE id = #{id} </select> </mapper>
|
输入映射parameterType:
简单类型,java
pojo类型、map类型,两种类型一样的处理
List类型,List里边是什么类型就放什么类型
pojo包装pojo类型
输出映射resultType、resultMap
- ``resultType`可映射简单类型、pojo类型、Map类型
resultMap可实现,查询列和属性不一致、关联关系,延迟加载
resultMap:需要单独写resultMap标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <!-- 定义resultMap:将查询的列名和映射的pojo的属性名做一个对应关系 --> <!-- type:指定查询结果要映射的pojo的类型 id:指定resultMap的唯一标示 --> <resultMap type="user" id="userListResultMap"> <!-- id标签:映射查询结果的唯一列(主键列) column:查询sql的列名 property:映射结果的属性名 --> <id column="id_" property="id"/> <!-- result标签:映射查询结果的普通列 --> <result column="username_" property="username"/> <result column="birthday_" property="birthday"/> </resultMap> <!-- resultMap入门 --> <select id="findUserListResultMap" resultMap="userListResultMap"> SELECT id id_,username username_,birthday birthday_ FROM user </select>
|
4.测试
加载全局配置文件
获取sqlSessionFactory对象,通过sqlSessionFactory的getMapper获取业务对象mapper,
mapper对象执行Mapper接口的实际业务相关的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| private SqlSessionFactory sqlSessionFactory;
@Before public void init() throws Exception { // 加载全局配置文件(同时把映射文件也加载了) String resource = "phase02/SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); // sqlsessionFactory需要通过sqlsessionFactoryBuilder读取全局配置文件信息之后 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testFindUserById() { //创建UserMapper对象 SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); //调用UserMapper对象的API User user = mapper.findUserById(1); System.out.println(user); }
|
2.注解开发
1.全局配置文件
和XML方式一样,不需要配置mappers属性
2.***Mapper接口
接口方法
接口方法上写注解,不需要xml文件
1 2 3
| // 查询 @Select("SELECT * FROM user WHERE id = #{id}") public User findUserById(int id);
|
3.测试
和XML方式一样