强烈介意刚开始学Mybatis的童鞋们去看api,附上中文api地址点击打开链接
还有下载Mybatis3的jar,地址点击打开链接
第一步:配置Mybatis3的配置文件Configuration.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">
<!-- 相同属性:最高优先级的属性是那些作为方法参数的,然后是资源/url 属性,最后是 properties元素中指定的属性
<property name="username" value="root"/>
<property name="password" value="sa"/>
-->
</properties>
<!-- 设置缓存和延迟加载等等重要的运行时的行为方式 -->
<settings>
<!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 -->
<setting name="defaultStatementTimeout" value="25000"/>
</settings>
<!-- 别名 -->
<typeAliases>
<typeAlias alias="UserInfo" type="com.yeshun.bean.UserInfo"/>
</typeAliases>
<environments default="development">
<!-- environment 元素体中包含对事务管理和连接池的环境配置 -->
<environment id="development">
<transactionManager type="JDBC" />
<!-- type分三种:
UNPOOLED是每次被请求时简单打开和关闭连接
UNPOOLED的数据源仅仅用来配置以下 4 种属性driver,url,username,password
POOLED :JDBC连接对象的数据源连接池的实现,不直接支持第三方数据库连接池
-->
<dataSource type="POOLED">
<property name="driver" value="${db.driverClassName}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
<!-- 在任意时间存在的活动(也就是正在使用)连接的数量 -->
<property name="poolMaximumActiveConnections" value="100"/>
<!-- 任意时间存在的空闲连接数 -->
<property name="poolMaximumIdleConnections" value="50"/>
<!-- 在被强制返回之前,池中连接被检查的时间 -->
<property name="poolMaximumCheckoutTime" value="20000"/>
</dataSource>
</environment>
</environments>
<!-- ORM映射文件 -->
<mappers>
<mapper resource="com/yeshun/bean/UserInfoMapper.xml"/>
</mappers>
</configuration>
<typeAliases> 是别名 在映射文件中就不必要写全名了,在UserInfoMapper.xml 中会用到
<environments> 配置数据源
<mappers> SQL 映射XML 文件是所有sql语句放置的地方。
db.driverClassName=oracle.jdbc.driver.OracleDriver
db.url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:ORCL
db.username=scott
db.password=tiger
UserInfo.java
package com.yeshun.bean;
public class UserInfo {
private String userid;
private String username;
private String password;
public String getUsername() {
return username;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
UserInfoMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!-- namespace用于java代码调用时识别指定xml的mapper文件 -->
<mapper namespace="com.yeshun.bean.UserInfo">
<!-- 配置ORM映射 -->
<resultMap type="UserInfo" id="BaseResultMap" >
<id property="userid" column="user_id" jdbcType="VARCHAR"/>
<result property="username" column="user_name" jdbcType="VARCHAR"/>
<result property="password" column="password" jdbcType="VARCHAR"/>
</resultMap>
<!-- 用来定义可重用的SQL代码段 -->
<sql id="demo_sql">
userid,username,password
</sql>
<insert id="inser_userInfo" parameterType="UserInfo">
<!-- include 引用可重用的SQL代码段 -->
INSERT INTO user_table(<include refid="demo_sql"/>) VALUES(#{userid},#{username},#{password})
</insert>
<select id="selectAll_userInfo" useCache="false" flushCache="true" resultMap="BaseResultMap">
SELECT * FROM user_table
</select>
<select id="selectById_userInfo" parameterType="String" resultType="UserInfo">
SELECT * FROM user_table WHERE id= #{id}
</select>
</mapper>
resultMap属性:type为java实体类;id为此resultMap的标识。(我们这里的UserInfo就是因为在Configuration.xml 取的别名,不然就要写全称)
resultMap可以设置的映射这里只有id ,result 还有很多别的,可以参照api
id、result是最简单的映射,id为主键映射;result其他基本数据库表字段到实体类属性的映射。
id、result语句属性配置细节:
属性 | 描述 |
|
property | 需要映射到JavaBean 的属性名称。 |
|
column | 数据表的列名或者标签别名。 |
|
javaType | 一个完整的类名,或者是一个类型别名。如果你匹配的是一个JavaBean,那MyBatis 通常会自行检测到。然后,如果你是要映射到一个HashMap,那你需要指定javaType 要达到的目的。 |
|
jdbcType | 数据表支持的类型列表。这个属性只在insert,update 或delete 的时候针对允许空的列有用。JDBC 需要这项,但MyBatis 不需要。如果你是直接针对JDBC 编码,且有允许空的列,而你要指定这项。 |
|
typeHandler | 使用这个属性可以覆写类型处理器。这项值可以是一个完整的类名,也可以是一个类型别名。 |
<sql> 标签,定义一些常用的sql语句,如:字段属性,where条件,order by 条件 等等
<select>,<inset>,<update>,<delete> 这些都是查询语句,在api中都有属性配置的详细细节
第二步:写UserInfoDao.java 来进行查询,在查询之前肯定要先得到MyBatis的数据库连接SqlSessionFactory
写一个SessionFactoryUtil类
package com.yeshun.util;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SessionFactoryUtil {
private static SqlSessionFactory sqlSessionFactory = null;
static {
Reader reader = null;
try {
reader = Resources.getResourceAsReader("Configuration.xml"); (配置文件名称)
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
public static void main(String[] args) {
System.out.println(System.getProperty("java.io.tmpdir"));
}
}
这一点和Hibernate 有点类似!
package com.yeshun.dao;
import java.util.List;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import com.yeshun.bean.UserInfo;
import com.yeshun.util.SessionFactoryUtil;
public class UserInfoDao {
public void insert(UserInfo user){
SqlSession session = SessionFactoryUtil.getSession();
session.insert("com.yeshun.bean.UserInfo.inser_userInfo",user);
session.commit();
session.close();
}
public List<UserInfo> findAll(){
SqlSession session = SessionFactoryUtil.getSession();
List<UserInfo> lstUser = null;
lstUser = session.selectList("com.yeshun.bean.UserInfo.selectAll_userInfo");
session.close();
return lstUser;
}
@SuppressWarnings("unchecked")
public List<UserInfo> findList(int pageNo,int pageSize){
SqlSession session = SessionFactoryUtil.getSqlSessionFactory().openSession();
List<UserInfo> lstUser = null;
lstUser = session.selectList("com.yeshun.bean.UserInfo.selectAll_userInfo", null, new RowBounds((pageNo-1)*pageSize, pageSize));
session.close();
return lstUser;
}
public UserInfo findById(String userid){
SqlSession session = SessionFactoryUtil.getSqlSessionFactory().openSession();
UserInfo user = (UserInfo) session.selectOne("com.yeshun.bean.UserInfo.selectById_userInfo", userid);
session.close();
return user;
}
public static void main(String[] args) {
List<UserInfo> lst = new UserInfoDao().findAll();
// List<UserInfo> lst = new UserInfoDao().findList(3,10);
for (UserInfo userInfo : lst) {
System.out.println(userInfo.getUserid()+" "+userInfo.getUsername());
}
}
}
完成!