到成都实习,要求使用MyBatis框架,没学过,写一个练练手。
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
一个简单的练手项目:
创建一个Model类:
package com.ht.model;
public class UserInfo {
private int userId;
private String userName;
private String password;
<span style="white-space:pre"> </span>//getter setter
@Override
public String toString() {
return "UserInfo [userId=" + userId + ", userName=" + userName + ", password=" + password + "]";
}
}
创建对应Model映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd" >
<!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置为:包名+sql映射文件名,
这样就能够 保证,namespace的值是唯一的-->
<mapper namespace="com.ht.model.UserInfo">
<resultMap type="UserInfo" id="userMap">
<id column="user_id" property="userId"/>
<result column="user_name" property="userName"/>
<result column="password" property="password"/>
</resultMap>
<!-- 在select标签中编写查询的SQL语句,设置select标签的id属性为getUser,
id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,
resultType属性执行查询返回的结果集类型-->
<!-- <select id="get" parameterType="int" resultType="UserInfo">
select user_id as "userId",user_name as "userName",password from t_user where user_id = #{id}
</select> -->
<select id="get" parameterType="int" resultMap="userMap">
select * from t_user where user_id = #{id}
</select>
</mapper>
创建mybatis-config.xml文件:
<?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 resource="jdbc.properties"></properties>
<typeAliases>
<package name="com.ht.model"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<!-- 数据库连接信息 -->
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 关联Model包下的配置文件 -->
<mapper resource="com/ht/model/user.xml"/>
</mappers>
</configuration>
测试类:
package com.ht.test;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.ht.model.UserInfo;
public class MyTest {
public static void main(String[] args) {
//mybatis的配置文件
String resource = "mybatis-config.xml";
//使用类加载mybatis的配置文件(同时加载关联的映射文件 )
InputStream is = MyTest.class.getClassLoader().getSystemResourceAsStream(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sessionFactory.openSession();
String arg0 = "com.ht.model.UserInfo.get";
UserInfo user = session.selectOne(arg0, 2);
System.out.println(user);
}
}
运行测试类,可以从数据库中读取出ID为2的一列数据。结果显示:
初步体验MyBatis感觉更灵活,不像Hibernate,完全把SQL封装了,可以随意更改自己的SQL语句内容。