MyBatis(上)

MyBatis介绍 :

是一个优秀的开源持久层框架,半自动化的ORM框架,前身是IBatis,2010年由apache迁移到了google改名mybaits,2013迁移到了github

持久层数据框架  专注于数据库打交道的这个一个分层

持久层技术

1、JDBC  a.java访问数据库

2、Hibernate 通过Hibernate框架访问数据库

3、MyBatis 通过MyBatis框架访问数据库

MyBatis第一个项目

导入jar包

添加配置文件src/mybatis.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>
	<!-- 数据库的连接信息 -->	
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8"/>
				<property name="username" value="root"/>
				<property name="password" value="123456"/>
			</dataSource>
		</environment>
	</environments>
	
	<!-- 映射文件信息 -->
	<mappers>
		<mapper resource="com/twy/dao/userinfoMapper.xml"/>
	</mappers>
	
</configuration>

添加一个映射文件src/com/twy/dao/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">

<mapper namespace="UserMapper">
	<select id="findAllUser" resultType="com.twy.pojo.UserInfo">
		select * from userinfo
	</select>
</mapper>

javabean  src/com/twy/pojo/UserInfo.java

package com.twy.pojo;

public class UserInfo {
	String uid;
	String uname;
	String upwd;
	String ubir;

	public String getUid() {
		return uid;
	}

	public void setUid(String uid) {
		this.uid = uid;
	}

	public String getUname() {
		return uname;
	}

	public void setUname(String uname) {
		this.uname = uname;
	}

	public String getUpwd() {
		return upwd;
	}

	public void setUpwd(String upwd) {
		this.upwd = upwd;
	}

	public String getUbir() {
		return ubir;
	}

	public void setUbir(String ubir) {
		this.ubir = ubir;
	}

	@Override
	public String toString() {
		return "UserInfo [uid=" + uid + ", uname=" + uname + ", upwd=" + upwd + ", ubir=" + ubir + "]";
	}

}

测试

package com.twy.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.twy.pojo.UserInfo;

public class TestUserInfo {

	@Test
	public void testFindAllUser() throws IOException {
		SqlSessionFactoryBuilder sb = new SqlSessionFactoryBuilder();
		InputStream ins = Resources.getResourceAsStream("mybatis.xml");
		SqlSessionFactory sf = sb.build(ins);
		SqlSession session = sf.openSession();

		List<UserInfo> users = session.selectList("UserMapper.findAllUser");
		for (UserInfo userInfo : users) {
			System.out.println(userInfo);
		}
	}
}

结果

引入日志记录

加入log4j的jar文件

在src目录下加入log4j.properties的属性的文件

src/log4j.properties

# Global logging configuration
log4j.rootLogger=debug, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

查看执行记录

详解配置文件

<?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>
	<!-- 数据库的连接信息 -->
	<environments default="development">
		<environment id="development">
			<!--JDBC(采用JDBC的方式来管理事务) MANAGED(由容器来管理事务的生命周期, spring) -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- UNPOOLED(不使用连接池) POOLED(使用连接池) JNDI(通过JNDI容器获取数据库连接) -->
			<dataSource type="POOLED">
				<!-- db连接四要素 -->
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>

	<!-- 映射文件信息 -->
	<mappers>
		<!-- 注册单个映射文件 -->
		<mapper resource="com/twy/dao/userinfoMapper.xml" />
		<!-- <mapper url=”映射文件的路径”>:映射文件可以在本地,也可以在网络上 -->
		<!-- 
		<mapper class=”映射文件的类路径”>:注册单个映射文件 
		i. 此种方式是有条件限制的 
			1. 映射文件的文件名要和Dao接口的名称相同 
			2. 映射文件要和Dao接口在同一包中
			3. 映射文件中的<mapper/>的namespace的值为Dao接口的全类名
		-->
	</mappers>

</configuration>

MyBatis API详解

1、    Resources
a)    资源,用于读取资源文件,有很多的方法都可以加载并解析资源文件,返回不同的IO流对象

2、    SqlSessionFactoryBuilder类
a)    用与创建SqlSessionFactory, 使用的是SqlSessionFactoryBuilder类的build方法, SqlSessionFactoryBuilder创建完了以后,自动的释放了;

3、    SqlSessionFactory
是一个重量级的对象(系统的开销非常大的一个对象),线程安全的, 可以通过他打开一个SqlSession
openSession(true):打开一个具有自动提交功能的SqlSession
openSession(false):需要手动的去提交
openSession():同openSession(false)
4、    SqlSession接口
对象用于执行持久化操作,一次会话以SqlSession的对象创建开始,SqlSession对象的关闭结束;

对象线程不安全,每次数据库的会话结束前需要马上调用关闭方法;

常用的方法:
    增加:
        Insert(String);
        Insert(String, Object);
    删除
        Delete(String)
        Delete(String, Object)
    修改
        Update(String)
        Update(String, Object)
    查询
        selectOne():查询单个对象
        selectList():查询列表
        select():查询列表
 

增删查改完整案例

src/jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
jdbc.uname=root
jdbc.upwd=123456

src/mybatis.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>

	<!-- 注册单个类 -->
	<!-- <typeAlias type="com.dn.pojo.Userinfo" alias="user"/> -->
	<!-- 注册别名 -->
	<typeAliases>
		<!-- 批量注册 -->
		<package name="com.twy.pojo" />
	</typeAliases>

	<!-- 数据库的连接信息 -->
	<environments default="development">
		<!-- 环境一 -->
		<environment id="development">
			<!--JDBC(采用JDBC的方式来管理事务) MANAGED(由容器来管理事务的生命周期, spring) -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- UNPOOLED(不使用连接池) POOLED(使用连接池) JNDI(通过JNDI容器获取数据库连接) -->
			<dataSource type="POOLED">
				<!-- db连接四要素 -->
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.uname}" />
				<property name="password" value="${jdbc.upwd}" />
			</dataSource>
		</environment>
	</environments>

	<!-- 映射文件信息 -->
	<mappers>
		<!-- 注册单个映射文件 -->
		<mapper resource="com/twy/dao/userinfoMapper.xml" />
		<!-- <mapper url="file:///E:\ssss\sss.xml"/> -->
		<!-- <mapper class="com.twy.pojo.Userinfo"/> <package name="com.dn.dao"/> -->
	</mappers>



</configuration>

src/com/twy/pojo/UserInfo.java

package com.twy.pojo;

public class UserInfo {
	int uid;
	String uname;
	String upwd;
	String ubir;

	public int getUid() {
		return uid;
	}

	public void setUid(int uid) {
		this.uid = uid;
	}

	public String getUname() {
		return uname;
	}

	public void setUname(String uname) {
		this.uname = uname;
	}

	public String getUpwd() {
		return upwd;
	}

	public void setUpwd(String upwd) {
		this.upwd = upwd;
	}

	public String getUbir() {
		return ubir;
	}

	public void setUbir(String ubir) {
		this.ubir = ubir;
	}

	@Override
	public String toString() {
		return "UserInfo [uid=" + uid + ", uname=" + uname + ", upwd=" + upwd + ", ubir=" + ubir + "]";
	}

}

src/com/twy/dao/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">

<mapper namespace="UserMapper">
	<select id="findAllUser" resultType="userinfo">
		select * from userinfo
	</select>
	
	<select id="findById" resultType="userinfo" parameterType="int">
		select * from userinfo where uid=#{id}
	</select>
	
	<insert id="addUser" parameterType="userinfo">
		insert into userinfo(uname,upwd,ubir) values(#{uname},#{upwd},#{ubir})
	</insert>
	
	<delete id="delUser" parameterType="int">
		delete from userinfo where uid=#{id}
	</delete>
	
	<update id="updateUser" parameterType="userinfo">
		update userinfo set uname=#{uname},upwd=#{upwd},ubir=#{ubir} where uid=#{uid}
	</update>
	
	
</mapper>

测试

package com.twy.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.twy.pojo.UserInfo;

public class TestUserInfo {

	@Test
	public void testFindAllUser() throws IOException {
		SqlSessionFactoryBuilder sb = new SqlSessionFactoryBuilder();
		InputStream ins = Resources.getResourceAsStream("mybatis.xml");
		SqlSessionFactory sf = sb.build(ins);
		SqlSession session = sf.openSession();

		List<UserInfo> users = session.selectList("UserMapper.findAllUser");
		for (UserInfo userInfo : users) {
			System.out.println(userInfo);
		}
	}

	@Test
	public void testFindById() throws IOException {
		SqlSessionFactoryBuilder sb = new SqlSessionFactoryBuilder();
		InputStream ins = Resources.getResourceAsStream("mybatis.xml");
		SqlSessionFactory sf = sb.build(ins);
		SqlSession session = sf.openSession();

		UserInfo userInfo = session.selectOne("UserMapper.findById", 1);
		System.out.println(userInfo);
	}

	@Test
	public void testAddUser() throws IOException {
		SqlSessionFactoryBuilder sb = new SqlSessionFactoryBuilder();
		InputStream ins = Resources.getResourceAsStream("mybatis.xml");
		SqlSessionFactory sf = sb.build(ins);
		SqlSession session = sf.openSession();// sf.openSession(true)自动提交事务

		UserInfo userInfo = new UserInfo();
		userInfo.setUname("孙行者");
		userInfo.setUbir("200-5-20");
		userInfo.setUpwd("888888");
		session.insert("UserMapper.addUser", userInfo);
		session.commit();
	}

	@Test
	public void testDelUser() throws IOException {
		SqlSessionFactoryBuilder sb = new SqlSessionFactoryBuilder();
		InputStream ins = Resources.getResourceAsStream("mybatis.xml");
		SqlSessionFactory sf = sb.build(ins);
		SqlSession session = sf.openSession();
		session.delete("UserMapper.delUser", 1);
		session.commit();
	}

	@Test
	public void testUpdateUser() throws IOException {
		SqlSessionFactoryBuilder sb = new SqlSessionFactoryBuilder();
		InputStream ins = Resources.getResourceAsStream("mybatis.xml");
		SqlSessionFactory sf = sb.build(ins);
		SqlSession session = sf.openSession();

		UserInfo userInfo = new UserInfo();
		userInfo.setUid(2);
		userInfo.setUname("孙行者");
		userInfo.setUbir("200-5-20");
		userInfo.setUpwd("666666");
		session.update("UserMapper.updateUser", userInfo);
		session.commit();
	}

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值