目录
概述
mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。
最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。
Mybatis映射文件配置
Mybatis映射文件配置究竟是什么?增(insert)、删(delete)、改(update)、查(select)标签体里面的内容该怎么写?
这里给出一张有关查询操作的解析图,进行一个详细的了解:
Mybatis常用的API:
@Test
public void test3() throws IOException {
//获得核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
------
}
<insert>:插入
<!--插入操作-->
<insert id="save" parameterType="user">
insert into user values(#{id},#{username},#{password})
</insert>
<delete>:删除
<!--删除操作-->
<delete id="delete" parameterType="int">
delete from user where id=#{id}
</delete>
<update>:修改
<!--修改操作-->
<update id="update" parameterType="user">
update user set username=#{username},password=#{password} where id=#{id}
</update>
Mybatis的dao层实现方式:
dao层:UserMapper:
public interface UserMapper {
public List<User> findByCondition(User user);
public List<User> findByIds(List<Integer> ids);
}
<where>:where条件 & <if>:if判断
<!--sql语句抽取-->
<sql id="selectUser">select * from user</sql>
<!--查询操作-->
<select id="findByCondition" parameterType="user" resultType="user">
<include refid="selectUser"></include>
<where>
<if test="id!=0">
and id=#{id}
</if>
<if test="username!=null">
and username=#{username}
</if>
<if test="password!=null">
and password=#{password}
</if>
</where>
</select>
<where>:where条件 & <foreach>:循环
<!--sql语句抽取-->
<sql id="selectUser">select * from user</sql>
<select id="findByIds" parameterType="list" resultType="user">
<include refid="selectUser"></include>
<where>
<foreach collection="list" open="id in(" close=")" item="id" separator=",">
#{id}
</foreach>
</where>
</select>
Mybatis核心配置文件常用标签
Mybatis核心配置文件里的各个标签体又代表什么呢?它们之间的层级关系又是怎样的呢?
1.environments标签 | |
2.mapper标签 | |
3.Properties标签 | |
4.typeAliases标签 | |
5.mybatis框架已设置好的常用类型的别名 |
<?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文件-->
<properties resource="jdbc.properties"></properties>
<!--自定义别名-->
<typeAliases>
<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>
</typeAliases>
<!--自定义注册类型处理器-->
<typeHandlers>
<typeHandler handler="com.itheima.handler.DateTypeHandler"></typeHandler>
</typeHandlers>
<!--配置分页助手插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"></property>
</plugin>
</plugins>
<!--数据源环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<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>
<mapper resource="com/itheima/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>