mybatis学习总结(一)
主要展示了mybatis框架的基本流程,和关键组件,以一个简单的小栗子走通整个流程
1、三大基本组价
- mybatis-config.xml
- UserMapper.xml
- UserMapper.java(此为mapper接口类,里面有dao层的方法,包含基本pojo: User.java)
代码结构参考如下:
mybatis-config.xml
这是mybatis的总体配置文件,用于配置数据源、配置mapper接口类xxxMapper.java、配置与mapper接口类相对应的映射配置文件 xxxMapper.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>
<!-- 加载属性文件-->
<properties>
<!--properties中还可以配置一些属性名和属性值 -->
<!-- <property name="jdbc.driver" value=""/> -->
</properties>
<!-- 全局配置参数,需要时再设置 -->
<!-- <settings>
</settings> -->
<!-- 别名定义 -->
<typeAliases>
<!-- 单个别名定义
<typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->
<!--指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) -->
<package name="pojo"/> <!-- 包下的所有类被自动识别 -->
</typeAliases>
<!-- 数据源配置(和spring整合后按spring的来,这里的被弃置) -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="123123"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射配置文件 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
<!-- 也可以以package的形式批量加载,原理同上 -->
</mappers>
</configuration>
UserMapper.xml
这是针对具体pojo及dao类所对应的sql配置文件,这里面写具体的sql业务代码,根据mybatis内置的映射规则,将sql语句与dao中的方法建立联系;
代码及部分属性解释如下:
<?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="pojo.User">
<!-- 根据用户名称模糊查询用户信息,可能返回多条
resultType:指定就是单条记录所映射的java对象 类型
#{}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。
使用${}拼接sql,引起 sql注入
#{value}:接收输入 参数的内容,
-->
<select id="findUserByName" parameterType="java.lang.String" resultType="pojo.User">
select * from user where name like '%#{value}%'
</select>
<select id="listAllUsers" resultType="pojo.User">
select * from user
</select>
</mapper>
一共有4点需要匹配的:
1、namespace属性匹配对应的接口类全限定名;
2、id属性 匹配接口类的对应的方法名;
3、parameterType属性匹配方法的参数类型;
4、resultType属性匹配方法的返回值类型
这样UserMapper.xml映射文件与UserMapper.java接口类,就可以映射匹配成功
UserMapper.java
这是mapper接口类,里面有具体的dao层的方法,每个方法对应一个映射文件中的sql语句标签,具体如下:
package mapper;
import java.util.List;
import pojo.User;
/**
* @author xxx
* @discription User类的mapper代理接口
*/
interface UserMapper {
public List<User> findUserByName(String name);
public List<User> listAllUsers();
}
可以看出方法与映射文件一一对应。
(pojo类自己补充,这里不贴了)
测试代码
package mybaitsDemoTest;
import static org.junit.Assert.*;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionException;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import pojo.User;
public class testcase {
private static SqlSessionFactory ssf;
private static SqlSession session;
@Before
public void setUp() throws Exception {
//
String resource = "config/mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
//根据配置文件流创建会话工厂
ssf = new SqlSessionFactoryBuilder().build(is);
//打开一个会话
session = ssf.openSession();
}
@Test
public void test() {
List<User> users = session.selectList("mapper.UserMapper.findUserByName", 'a');
System.out.println(users);
assertNotNull(users);
}
}
成功通过测试,说明整个流程已经走通,mybatis基本框架完成!