mybatis(一) 简单入门

版权声明:版权所有,如需转载,请注明出处 https://blog.csdn.net/houdezaiwu1/article/details/83586269

mybatis作为半持久化orm,对sql语句进行了分类,封装了jdbc的使用,本例使用mybatis,实现一个简单的查询。为了进一步分析底层实现,先不整合spring或springboot,仅作为学习,实际开发中已经不这个做了,略显麻烦。

  • 先介绍下mybatis的三个核心:
  • 核心接口和类:SqlSessionFactoryBuilder(用过即丢,适合在方法体内)、SqlSessionFactory、SqlSession
  • 核心配置文件:mybatis-config.xml
  • SQL映射文件:Mapper.xml

创建的工厂结构如下:

一、创建持久化类

package com.model;

public class User {
	private String userId;
	private String userName;
	private String belongOrg;
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getBelongOrg() {
		return belongOrg;
	}
	public void setBelongOrg(String belongOrg) {
		this.belongOrg = belongOrg;
	}
	public User(String userId, String userName, String belongOrg) {
		super();
		this.userId = userId;
		this.userName = userName;
		this.belongOrg = belongOrg;
	}
	public User() {
		super();
	}
	

}

可以简单理解为符合javaBean规范的实体类,不需要和数据库名一样,因为Mybatis是与sql语句的映射,一般情况和字段名一样就可以了。 

2. 创建userDao

package com.dao;

import java.util.List;

import com.model.User;

public interface UserDao {
	public List<User> getUserList();
}

3. 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.dao.UserDao">
	
	<resultMap type="User" id="UserMap">
		<result property="userId" column="USERID"/>
		<result property="userName" column="USERNAME"/>
	</resultMap>
	<select id="getUserList" resultMap="UserMap"> 
		select * from user_info where userId='admin'
	</select>
	<!--resultType自动映射-->
	<!-- <select id="getUserList" resultType="User"> 
		select * from user_info
	</select>  -->
</mapper>

4. 配置mybatis-config.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mbatis-3-config.dtd">
<configuration>
	<!-- 1. 引入database.properties数据库文件 -->
	<properties resource="db.properties"/>
	<!-- 2.加载外部日志文件 -->
	<settings >
		<!-- 设置日志记录 -->
		<setting name="logImpl" value="LOG4J"/>
	</settings>
	<typeAliases>
		<!-- 指定包名pojo,MyBatis会自动扫描下面的JavaBean -->
		<package name="com.model"/>
	</typeAliases>
	<!-- 3.配置mybatis多套运行环境 -->
	<environments default="development">
		<!-- 3.1环境的id值,根据值确定使用哪个 -->
		<environment id="development">
			<!-- Begin 3.2 配置连接数据库环境 Begin -->
				<!-- 事务管理器有JDBC和MANAGED两种可选 -->
			<transactionManager type="JDBC"/>
				<!-- 数据源类型:UNPOOLED、 POOLED、JNDI,pooled用池的概念将JDBC对象连接,
					避免了创建新的连接所必需的初始化和认证时间,数据库连接可复用,不用每次请求都创建,利于快速
					响应
				-->
			<dataSource type="POOLED">
				<property name="driver" value="${driver}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${userName}"/>
				<property name="password" value="${password}"/>
			</dataSource>
			<!-- End 配置连接数据库环境 End -->
		</environment>
	</environments>
	<!-- 4. Begin 把映射文件加载到配置文件中 Begin -->
	<mappers>
		<mapper resource="com/dao/UserMapper.xml"></mapper>
	</mappers>
	<!-- End 把映射文件加载到配置文件中 End -->
</configuration>

mybatis的核心配置文件,标签要按照顺序。

5. 创建sqlSession的工具类

package com.util;

import java.io.InputStream;

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 SqlSessionUtil {
	//1. 用过即丢
	private static SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
	private static SqlSessionFactory factory;
	/**
	 * 1. 创建工厂对象
	 */
	static {
		try{
			InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //读取mybatis配置文件
			factory = factoryBuilder.build(is);
		} catch(Exception e){
			e.printStackTrace();
		}
	}
	/**
	 * 2. 得到session对象,用来操作数据库
	 * @return
	 */
	public static SqlSession getSqlSession(){
		SqlSession sqlSession = factory.openSession();
		return sqlSession;
	}
	/**
	 * 3.关闭session
	 * @param sqlSession
	 */
	public static void close(SqlSession sqlSession){
		if(sqlSession!=null) sqlSession.close();
	}
}

SqlSession 是用于执行持久化操作的对象,类似于JDBC的connection,对应一次会话,所以每次访问数据库都要创建,生命周期不是永久的,最佳作用域是request或方法体内,用完关闭也十分重要。

SqlSessionFactory是创建 SqlSession 的工厂,所有mybatis都是以它为中心得,通过静态,保证了只被创建一次,application作用域。

6. 接口实现类UserImpl

package com.service;

import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.dao.UserDao;
import com.model.User;
import com.util.SqlSessionUtil;

public class UserImpl implements UserDao {
	
	public List<User> getUserList() {
		// TODO Auto-generated method stub
		SqlSession sqlSession = SqlSessionUtil.getSqlSession();
		List<User> userList = sqlSession.getMapper(UserDao.class).getUserList();
	//	List<User> userList = sqlSession.selectList("getUserList", UserDao.class); 这种方式也可以,但是手动输入的getUserList,容易出错
		SqlSessionUtil.close(sqlSession);
		return userList;
	}
}

7.demo测试

public class Demo {
    public static void main(String[] args) {
		UserImpl userImpl = new UserImpl();
		List<User> userList = userImpl.getUserList();
		for(User user:userList){
			System.out.println("userId is : "+user.getUserId()+";userName is : "+user.getUserName());
		}
    
	}
}

 控制台输出结果:

userId is : admin;userName is : admin

完成! 

后记:DTD文件有两个需要引入,不然编辑的时候没有自动提示。

猜你喜欢

转载自blog.csdn.net/houdezaiwu1/article/details/83586269
今日推荐