mybatis
1、MyBatis数据框架介绍
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
2、mybatis使用
- 导入mybatis依赖的包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
- 在mybatis配置文件或者spring的配置文件中配置数据源。
- 创建Mapper接口和Mapper映射文件。
- 在mybatis配置文件中注册映射文件。
3、MyBatis全局配置文件元素详细介绍
properties元素:配置属性的元素,提供了三种配置方式。
- 首先读取properties子元素。
<properties>
<property name="username" value="root"/>
</properties>
- 然后读取properties的resource属性对应资源文件。
<properties resource="db.properties">
</properties>
- 最后读取程序传递的参数。
settings元素:可以改变mybatis的运行状态
typeAliases元素:提供别名
一个类的类名通常很长,可以使用别名简化。
<typeAliases>
<typeAlias type="com.peng.pojo.User" alias="user"/>
</typeAliases>
typeHandler类型处理器:java和jdbc中的数据类型不大相同,在映射的时候需要使用typeHandler进行类型的转换
- 内置的类型转换器
- 自定义的类型转换器
继承TypeHandler接口实现自定义和类型转换器。并在resultMap中指定转换器类型。
<resultMap id="re" type="user">
<result column="uname" property="uname"
typeHandler="com.peng.util.MyTypeHandlerVarchar"/>
</resultMap>
enviroments:环境选择
一个enviroment标签就代表一个环境。
- transactionManager:配置的是数据库事务,其中type属性有3种配置方式。
1、JDBC,采用JDBC方式管理事务,在独立编码中我们常常使用。
2、MANAGED,采用容器方式管理事务,在JNDI数据源中常用。
3、自定义,由使用者自定义数据库事务管理办法,适用于特殊应用。 - property元素:则是可以配置数据源的各类属性,我们这里配置了autoCommit = false,则是要求数据源不自动提交。
- dataSource标签:是配置数据源连接的信息,type属性是提供我们对数据库连接方式的配置,同样MyBatis提供这么几种配置方式:
1、UNPOOLED,非连接池数据库
2、POOLED,连接池数据库(PooledDataSource)。
3、JNDI,JNDI数据源(JNDIDataSource)。
4、自定义数据源。
mappers:导入mapper的映射文件
4、Mapper映射文件
mapper的映射文件往往会绑定一个mapper接口,且里面都是一些sql定义,每一个sql对应mapper接口中的一个方法,当然也可以使用注解的方式指定mapper接口方法对应的sql语句。
mapper映射文件:
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.peng.mapper.UserMapper">
<select id="getUser" resultType="list">
select * from user;
</select>
</mapper>
mapper接口:sql语句也可以直接在注解中使用
@Mapper
public interface UserMapper {
ArrayList<User> getUser();
@Select("select * from user where uid=#{uid}")
ArrayList<User> getUserById(int uid);
@Insert("insert into user values (#{uname},#{pwd},#{uid},#{gender},#{birthdate},\n" +
"#{email},#{phone},#{utype},#{address},#{ustatus},#{vip},#{host},#{port});")
void addUser(User user);
@Delete("delete from user where uid=#{arg0} and pwd=#{arg1}")
int delUser(int id,String pwd);
@Update("update user set uname=#{uname},pwd=#{pwd},gender=#{gender},birthdate=#{birthdate}," +
"email=#{email},phone=#{phone},utype=#{utype},address=#{address} " +
"where uid=#{uid}")
int updateUser(User user);
}
一些重要的参数:
- mapper标签的namespace:对应mapper接口
- sql标签:在于我们可以定义一串SQL 语句的组成部分,其他的语句可以通过引用来使用它。
- resultMap:结果映射集,查询到的结果保存在resultMap格式中。