MyBatis环境搭建
1.首先下载MyBatis所需要的jar包 并导入工程中
2.编写核心配置文件
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"></properties>
<typeAliases>
<typeAlias type="com.xxx.bean.User" alias="user"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/xxx/bean/User.xml"/>
<package name="com.xxx.dao"/>
</mappers>
</configuration>
3.编写Mapper文件(为实体类User编写Mapper文件)
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
<select id="findUserById" parameterType="Integer" resultType="user">
select * from User where id = #{id}
</select>
<select id="searchByName" parameterType="String" resultType="user">
select * from user where name like "%"#{value}"%"
</select>
<insert id="insertUser" parameterType="user">
insert into User values(null,#{name},#{address},#{sex},#{phone},#{age})
</insert>
注意:insert获取添加成功的数据的自增主键
可以添加属性:useGeneratedKeys="true" keyProperty="id"
4.获取session进行操作
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
InputStream input = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory factory = builder.build(input);
SqlSession session = factory.openSession();
/*
test表示Mapper文件中的namespace .后面的代表select/insert/update/delete
标签中的id 后面的是sql语句中的参数
User user = session.selectOne("test.findUserById", 2);
List<User> list = session.selectList("test.searchByName", "水");
int insert = session.insert("test.insertUser", user);
处理查询外 其他的都需要提交事务
session.commit();
*/
5.关闭资源
session.close();
MyBatis动态代理接口开发
1.MyBatis提供动态代理接口开发的原因:
在传统的分层结构中 有大量的Dao层实现类 随着项目的扩展 这些类文件会越来越多 不方便维护
Mybatis 提供了一种dao层的解决方案
纯接口开发
只有接口没有实现类 Mybatis自动为接口生成代理对象 完成实现类的封装
实现原理:生成代理对象 实现目标接口 并在代理对象中 从mapper读取配置文件 生成实现代码
Mybatis根据接口 创建实现类 在实现类中自动调用mapper中定义好的方法
具体操作
1.创建接口 定义需要的方法
public interface UserDao {
public User selectUserById(int id);
}
2.创建映射文件mapper
3.编写映射条件
1.命名空间指定为接口的完整类名
2.id必须与接口中的方法一致
3.参数类型与接口方法一直
4.返回值类型与接口方法一直
4.把映射文件注册到主配置文件
5.通过session获取接口对象
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 动态代理开发时 命名空间必须指定对应的接口 -->
<mapper namespace="com.lanou.dao.UserDao">
<select id="selectUserById" parameterType="int" resultType="com.lanou.bean.User">
select * from User where id = #{param}
</select>
</mapper>
@Test
public void testFun1() throws Exception {
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
InputStream input = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory factory = builder.build(input);
SqlSession session = factory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
System.out.println(userDao.selectUserById(2));
}