Mybatis学习日记(一)

强烈介意刚开始学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());
        }
        
    }
}



完成!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值