Mybatis学习总结(一)

Mybatis

开源的ORM(持久层)框架,之前为apahce旗下顶级开源项目,后转到google,变为myBatis,目前代码库:https://github.com/mybatis/mybatis-3/releases
mybatis主要让软件工程师的精力放在sql,通过mybatis提供的映射方式,可以自由的将数据映射为javaBean对象。

传统Dao层代码需求
1、在Dao层实现类中,存在大量的模板方法,能否提取模板方法,减少我们的工作量。
2、将statementId硬编码到了Dao层实现类。

采用mapper代理的方式进行Dao层的开发,需要有几个约定(约定大于配置)
1、XXXMapper.xml中namespace的值需要与Dao接口中的全类名相同。 (确定哪一个XXXMapper.xml文件)
2、XXXMapper.java 接口中的方法名与XXXMapper.xml中的statementId相同(确定使用哪个sql);
3、XXXMapper.java 接口中的方法输入参数需要与XXXMapper.xml中ParameterType定义的类型相同;
4、XXXMapper.java 接口中的方法返回值类型需要与XXXMapper.xml中resultType定义的类型相同;


Mybatis基本的开发步骤

1.引入jar包(Maven创建工程,此处是pom.xml配置文件)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.xt</groupId>
	<artifactId>mybatis.hi</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>mybatis.hi Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.3.1</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.38</version>
		</dependency>
		
		
	</dependencies>
	<build>
		<finalName>mybatis.hi</finalName>
	</build>
</project>


2.创建mybatis配置文件,文件名:mybatis-config.xml,配置了数据库连接池,以及<mappers> </mappers>


<?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="xtDevelopment">
		<environment id="xtDevelopment">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
		        <property name="url" value="jdbc:mysql://localhost:3306/xtdb"/>
		        <property name="username" value="root"/>
		        <property name="password" value="root"/>
			</dataSource>
		</environment>
	
	</environments>


	<mappers>
		<mapper resource="mybatis/mapper/userMapper.xml"/> 
	</mappers>


</configuration>


3.写mapper配置文件,例如userMapper.xml,将sql语句以配置文件的形式写出,并在mybatis-config.xml中配置好 userMapper.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="com.xt.mybatis">
	
	<!-- 
		select 标签,用作数据查询操作
		属性ID:标识映射文件中的sql的唯一性,ID被称为statmentId
		属性: parameterType 入参参数类型
		
		属性: resultType 输出结果类型,表示单条数据记录映射成的javaBean
		
		statementId = namespace + queryUserInfoById
		#{value} 此种方式表示预处理,代表占位符
		${value} 表示sql字符串的拼接,将接收到的数据不加任何修饰拼装到sql中
	 -->
	<select id="queryUserInfoById"  parameterType="int" resultType="com.xt.mybatis.hi.user.entity.UserInfo">
		select user_id userId, user_name userName, passwd, tel_no telNo, email, memo from user_info where user_id = #{userId}
	</select>

	<select id="queryUserInfo" parameterType="string" resultType="com.xt.mybatis.hi.user.entity.UserInfo">
		select user_id userId, user_name userName, passwd, tel_no telNo, email, memo from user_info where user_name like '%${value}%'
	</select>

	<!-- 
		insert标签  添加数据
	 -->
	<insert id="insertUserInfo" parameterType="com.xt.mybatis.hi.user.entity.UserInfo">
		insert into user_info values (#{userId}, #{userName}, password(#{passwd}), #{telNo}, #{email}, #{gender}, #{memo}, null, null)
	</insert>
	
	<!-- 
	delete 删除数据
	 -->
	<delete id="deleteUserInfoById" parameterType="int">
		delete from user_info where user_id = #{value}
	</delete>
	
	<update id="updateUserInfo" parameterType="com.xt.mybatis.hi.user.entity.UserInfo">
		update user_info  set user_name = #{userName}, tel_no = #{telNo}, email = #{email}, gender = #{gender}, memo = #{memo} where user_id = #{userId}
	
	</update>
</mapper>



4.创建SqlSessionFactory,通过它来生产出SqlSession,并执行Sql语句

4.1 首先创建一个UserInfo,对应数据库里的一个表

package com.xt.mybatis.hi.user.entity;

public class UserInfo {

	private int userId;
	
	private String userName;
	
	private String passwd;
	
	private String telNo;
	
	private String email;
	
	private String gender;
	
	private String memo;

	/**
	 * @return the userId
	 */
	public int getUserId() {
		return userId;
	}

	/**
	 * @param userId the userId to set
	 */
	public void setUserId(int userId) {
		this.userId = userId;
	}

	/**
	 * @return the userName
	 */
	public String getUserName() {
		return userName;
	}

	/**
	 * @param userName the userName to set
	 */
	public void setUserName(String userName) {
		this.userName = userName;
	}

	/**
	 * @return the passwd
	 */
	public String getPasswd() {
		return passwd;
	}

	/**
	 * @param passwd the passwd to set
	 */
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}

	/**
	 * @return the telNo
	 */
	public String getTelNo() {
		return telNo;
	}

	/**
	 * @param telNo the telNo to set
	 */
	public void setTelNo(String telNo) {
		this.telNo = telNo;
	}

	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * @param email the email to set
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * @return the gender
	 */
	public String getGender() {
		return gender;
	}

	/**
	 * @param gender the gender to set
	 */
	public void setGender(String gender) {
		this.gender = gender;
	}

	/**
	 * @return the memo
	 */
	public String getMemo() {
		return memo;
	}

	/**
	 * @param memo the memo to set
	 */
	public void setMemo(String memo) {
		this.memo = memo;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "UserInfo [userId=" + userId + ", userName=" + userName + ", passwd=" + passwd + ", telNo=" + telNo
				+ ", email=" + email + ", gender=" + gender + ", memo=" + memo + "]";
	}
	
}


4.2 创建MybatisHelloworld类,执行sql语句,在该类中用Junit进行测试,在myBatisInit()中生成SqlSessionFactory,并生成SqlSession。在测试方法中通过SqlSession执行Sql语句。


package com.xt.mybatis.hi.user;

import java.io.IOException;
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.Before;
import org.junit.Test;

import com.xt.mybatis.hi.user.entity.UserInfo;

public class MybatisHelloworld {

	//SqlSessionFactory sqlSessionFactory = null;
	SqlSession ss = null;
	
	@Before
	public void myBatisInit(){
		try {
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis/mybatis-config.xml"));
			ss = sqlSessionFactory.openSession();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void sayHello(){
		//创建SqlsessionFactory通过资源加载器加载配置文件
		UserInfo ui = ss.selectOne("com.xt.mybatis.queryUserInfoById", 201708244);
		System.out.println("------------------->" + ui);
	}
	
	@Test
	public void queryUserInfo(){
		List<UserInfo> uiList = ss.selectList("com.xt.mybatis.queryUserInfo", "admin");
		System.out.println("uiList-------------->" + uiList);
	}
	
	@Test
	public void insertUserInfo(){
		UserInfo ui = new UserInfo();
		ui.setUserId(201710290);
		ui.setUserName("小张");
		ui.setPasswd("123456");
		ui.setGender("男");
		ui.setEmail("test@zzxtit.com");
		ui.setTelNo("0371-55255350");
		ui.setMemo("hello mybatis");
		
		int affectedRowNo = ss.insert("com.xt.mybatis.insertUserInfo", ui);
		ss.commit();
		System.out.println("---------------->" + affectedRowNo);
	}
	
	@Test
	public void deleteUserInfoById(){
		int affectedRowNo = ss.delete("com.xt.mybatis.deleteUserInfoById", 201710290);
		System.out.println("---------------->" + affectedRowNo);
		ss.commit();
	}
	
	@Test
	public void updateUserInfo(){
		UserInfo ui = new UserInfo();
		ui.setUserId(201710290);
		ui.setUserName("嚣张");
		ui.setPasswd("123456");
		ui.setGender("M");
		ui.setEmail("test@zzxtit.com");
		ui.setTelNo("0371-55255350");
		ui.setMemo("hello mybatis");
		
		int affectedRowNo = ss.update("com.xt.mybatis.updateUserInfo", ui);
		System.out.println("---------------->" + affectedRowNo);
		ss.commit();
	}
	
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值