MyBatis的环境搭建以及简单案例
MyBatis框架简介
MyBatis的前身是iBatis,是一个开源的数据持久层(Dao)框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。
MyBatis内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。
数据持久化(概念)
数据持久化是将内存中的数据模型转换为存储模型,已将存储模型转换为内存中的数据模型的统称。
例如:文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。
ORM(数据持久化技术)
ORM(Object/RelationaI Mapping)及对象/关系映射,是一种数据持久化技术。它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据。
MyBatis环境搭建
这里我们使用mybatis-3.2.2版本、MyEclipse、mysql数据库演示
-
下载需要的jar文件
jar包以及源码包地址:http://github.com/mybatis/mybatis-3/releases
-
部署jar文件
将mybatis-3.2.2.jar 文件以及jdbc驱动文件复制到lib目录中,并添加到Libraries中。
-
创建MyBatis核心配置文件mybatis-config.xml
PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 引入 database.propertiesMySql文件 --> <properties resource="database.properties"> <!-- 先读取内部配置,外部会覆盖内部配置,resource中是引入外部的database文件,也可以不设置,直接在内部设置 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://laptop-4p6qt61b:3306/smbms?useUnicode=true&characterEncoding=utf-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </properties> <settings> <!-- 配置mybatis的log实现为LOG4J --> <setting name="logImpl" value="LOG4J"></setting> <!-- 设置resultMap的自动映射级别为Full(自动匹配所有) --> <setting name="autoMappingBehavior" value="FULL"/> </settings> <!-- 配置类型别名(pojo) --> <typeAliases> <package name="cn.smbms.pojo"/> <!-- 2.通过pojo包来自动扫描类名生成类型别名 --> </typeAliases> <!-- 配置mybatis多套运行环境 --> <environments default="development"> <environment id="development"> <!-- 配置事物管理,采用JDBC的事物管理 MANAGED(托管)--> <transactionManager type="JDBC"></transactionManager> <!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 UNPOOLED:--> <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> <!-- 将mapper映射文件加入到配置文件中 --> <mappers> <mapper resource="cn/smbms/dao/user/UserMapper.xml"/> <!-- 方式1:使用类资源路径获取资源 --> </mappers> </configuration>
-
创建持久化类POJO
持久化类是指其实例状态需要被MyBatis持久化到数据库中的类。在应用的设计中,持久化类通常对应需求中的业务实体。MyBatis一般采用POJO编程模型来实现持久化类,与POJO类配合完成持久化工作是MyBatis最常用的工作模式。
javascrip package cn.smbms.pojo;
import java.util.Date;
import java.util.List;
public class User {
/*字段*/
private Integer id ; //id
private String userCode; //用户编码
private String userName; //用户名称
private String userPassword; //用户密码
private Integer gender; //性别
private Date birthday; //出生日期
private String phone; //电话
private String address; //地址
private Integer userRole; //用户角色
private String userRoleName; //用户角色名称
private Integer createdBy; //创建者
private Date creationDate; //创建时间
private Integer modifyBy; //更新者
private Date modifyDate; //更新时间
private Role role; //用户角色
private List<Address> addressList; //用户地址列表
}
- 创建SQL映射文件与User接口类(为了方便暂时把它们放在dao.user包下)
SQL映射文件一般对应于相应的POJO,所以一般都是采用POJO的名称+Mapper的规则来进行命名。
SQL映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mapper.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.smbms.dao.user.UserMapper">
<!-- 根据用户名称查询用户列表 -->
<select id="getUserListByUserName" resultType="User" parameterType="string">
select * from smbms_user where userName like CONCAT('%',#{userName},'%')
</select>
</mapper>
User接口类
package cn.smbms.dao.user;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import cn.smbms.pojo.User;
/**
* 绑定映射语句的接口(User映射器)
* @author 一支烟
*
*/
public interface UserMapper {
/**
* 根据用户名称查询用户列表(方法名名称与映射文件的select中id一致)
* @param userName
* @return
*/
public List<User> getUserListByUserName(String userName);
}
-
创建测试类(可以使用JUnit或者main方法)
public class UserMapperTest { private Logger logger = Logger.getLogger(UserMapperTest.class); @Test public void test() { String resource = "mybatis-config.xml"; SqlSession sqlSession = null; List<User> userList = null; try { //1.读取全局配置文件:mybatis-config.xml //获取mybatis-config.xml文件的输入流 InputStream is = Resources.getResourceAsStream(resource); //2.创建SqlSessionFactory对象,此对象可以完成对配置文件的读取 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); //3.创建SqlSession对象,此对象的作用是调用mapper文件进行数据操作 sqlSession = factory.openSession(); //4.通过getMapper方法获取UserMapper接口对象 (官方推荐使用方式) UserMapper mapper = sqlSession.getMapper(UserMapper.class); //5.调用UserMapper中的方法 userList = mapper.getUserListByUserName("张"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ //4.关闭SqlSession对象 if(null != sqlSession){ sqlSession.close(); } } if(null != userList){ for (User user:userList) { //使用Log4j输出也可使用System输出 logger.debug("testGetUserList userCode:"+user.getUserCode()+ " and userName:"+user.getUserName()+ " and userRole:"+user.getUserRole()+ " and userRoleName:"+user.getUserRoleName()+ /* " and age:"+user.getAge()+*/ " and address:"+user.getAddress()); } } } }