MyBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。
它提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
它提供一种“半自动化”的ORM实现。
这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。而ibatis的着力点,则在于POJO与SQL之间的映射关系。
1、简单: myBATIS的被广泛认为是可用的最简单的持久化框架之一。
2、快速开发:myBATIS的理念是尽一切可能,以方便超快速开发。
3、可移植性: myBATIS可用于几乎任何语言或平台,如Java,Ruby和C#,微软.NET实现。
4、独立的接口:myBATIS提供独立于数据库的接口和API,帮助应用程序的其余部分保持独立的任何持久性相关的资源,
5、开源:myBATIS是自由和开放源码软件。
环境配置
导入myBATIS所需要的jar包:
mybatis-3.3.0.zip
配置文件:
1、一个基本配置文件:SqlMapConfig.xml
2、多个类配置文件:sqlMap.xml
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org/DTD Config 3.0" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 填写具体内容-->
</configuration>
数据源的配置方式1:(直接配置):
<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?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
事务配置 type= JDBC、MANAGED
1.JDBC:这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
2.MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。
数据源类型:UNPOOLED、POOLED、JNDI
1.UNPOOLED:这个数据源的实现是每次被请求时简单打开和关闭连接。它有一点慢,这是对简单应用程序的一个很好的选择,因为它不需要及时的可用连接。不同的数据库对这个的表现也是不一样的,所以对某些数据库来说配置数据源并不重要,这个配置也是闲置的
2.POOLED:这是JDBC连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。这是一种当前Web应用程序用来快速响应请求很流行的方法。
3.JNDI:这个数据源的实现是为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用
数据源的配置方式2:(properties配置):
Datasource.properties文件:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true
username=root
password=
增加配置
<properties resource="dbsource.properties" />
修改配置
<property name=“driver” value=“${driver}"/>
一个简单的例子
在数据库中创建一个t_user表。
主键 用户名 密码 账户
int varchar varchar int
pk_id f_username f_password f_account
创建一个UserBean对象
public class UserBean {
private int id;
private String name;
private String password;
private int account;
//添加get/set方法
}
创建DBUtil类
InputStream in = null;
try {
in = new FileInputStream("SqlmapConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(in != null){
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();}}}
我们将逐一完成以下基本操作:
创建UserMappers接口
public void addUser(UserBean user);
public void deleteUserByID(int id);
public void updateUserNameByID(String name, int id);
public List<UserBean> getAllUsers();
public List<UserBean> getAllUsersByName(String name);
public UserBean getUserByID(int id);
增加UserBean
在UserMapper.xml中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lovo.mapper.UserMapper">
<insert id="addUser" parameterType="com.lovo.bean.UserBean">
insert into t_user values(null,#{username},#{password},#{account})
</insert>
</mapper>
#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值
Service方法实现:
SqlSession session = DBUtil.getSession();
UserMapper um = session.getMapper(UserMapper.class);
um.addUser(new UserBean("zhang3", "123456", 1000));
session.commit();
给Bean对象起别名
<typeAliases>
<typeAlias alias="UserBean" type="com.lovo.bean.UserBean"/>
</typeAliases>
<typeAliases>
<package name="com.lovo.bean"/>
</typeAliases>
删除UserBean
<delete id="deleteUserByID" parameterType="int">
delete from t_user where pk_id = #{id}
</delete>
修改UserBean
<update id="updateUserNameByID">
update t_user set f_username=#{param1} where pk_id=#{param2}
</update>
<update id="updateUserNameByID">
update t_user set f_username=#{0} where pk_id=#{1}
</update>
查询单个UserBean
<select id="getUserByID" parameterType="int" resultType=“UserBean">
select * from t_user where pk_id=#{id}
</select>
无法对应字段名与属性名,除非保持一致
<resultMap id="userRst" type="UserBean">
<id property="id" column="pk_id" javaType="int" />
<result property="username" column="f_username" javaType="java.lang.String" />
<result property="password" column="f_password" javaType="java.lang.String" />
<result property="account" column="f_account" javaType="int" />
</resultMap>
<select id="getUserByID" parameterType="int" resultMap="userRst">
select * from t_user where pk_id=#{id}
</select>
查询所有UserBean
<select id="getAllUsers" resultMap="userRst">
select * from t_user
</select>