mybatis学习 入门篇

1、学习工具:
(1)、mybatis版本:mybatis-3.2.7
(2)、开发工具:eclipse jee oxygen
(3)、数据库驱动:mysql-connector-java-5.1.0-bin
2、持久化与ORM
(1)持久化:持久化是程序数据在瞬时状态和持久状态间转换的过程。
在这里插入图片描述
(2)ORM:Object Relational Mapping对象关系映射。
问题:由于我们在程序中是以面向对象的方式操作数据,但是在保存数据的时候却是以关系型数据库的方式存储。
解决问题:ORM就是用于解决对象和关系之间的转换。
a、实现在持久化层的增、删、改、查。
b、对持久层提供一种查询语言获API
c、对象-关系映射工具
d、提供与事务对象交互、执行检查、延迟加载以及其他优化功能。
对象关系映射

类对象中属性关系数据库中字段
idt_id
unamet_uname
hobbyt_hobby

3、mybatis
在使用mybatis之前,先看一段传统实现数据库操作的代码段

List<User> ulist = new ArrayList<User>();
Connection conn = null;
		try {
			//加载驱动类
			Class.forName("com.mysql.jdbc.Driver");			
			//建立连接
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=FALSE&serverTimezone=UTC", "root", "");
			String sql = "select t_name,t_pwd from t_user where id > ?";//? 为 占位符
			PreparedStatement ps = conn.prepareStatement(sql);
			ps.setObject(1, 14);//参数索引是从1开始的,而不是0
			ResultSet rs = ps.executeQuery();
			while(rs.next()) {
				User u = new User();
				u.setId(rs.getObject(1));
				u.setName(rs.getObject(2));
			}
		} catch (ClassNotFoundException e) {
			System.out.println("找不到驱动");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("数据库连接失败");
			e.printStackTrace();
		} finally {
			if(null != conn) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}

我们需要加载数据库驱动,建立连接,遍历取出来的数据,将数据封装到类对象中。
在看使用使用mybatis。
mybatis-config.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>
    <!-- 配置db的xml文件 -->
	<properties resource="db.properties"></properties>
	<!-- 方便使用类的别名,直接可以使用在com.cn.pojo这个包下的类名,而不用写完整路径 -->
	<typeAliases>
		<package name="com.cn.pojo"/>
	</typeAliases>
	<!-- 驱动环境 -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="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>
		</environment>
	</environments>
	<!-- 映射文件 存放sql语句 自动生成接口实现 -->
	<mappers>
		<mapper resource="com/cn/dao/user/UserDao.xml" />
	</mappers>
</configuration>

db.properties

driver=com.mysql.jdbc.Driver
#在和mysql传递数据的过程中,使用unicode编码格式,并且字符集设置为utf-8
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
user=root
password=root

UserDao.java(dao层接口,所需要实现的方法)

public interface UserDao {
	public User getUserById(String id); 
}

UserDao.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 包名+类名
<mapper namespace="com.cn.dao.user.UserDao">
			//id 方法名  //parameterType  参数类型 //resutlType  返回类型
   <select id="getUserById" parameterType="String" resultType="User">
//列名,User对象中的属性一般和列名相同,如果不相同自动封装会失败。
//我们可以通过给列名取一个和属性名一样的别名 这样也是可以映射的
//比如 数据库中的列名为 t_id,类中属性名为id 我们select语句可以写成 select t_id as id   ......
     SELECT id,userCode,userName,userPassword,gender,birthday,phone,
   address,userRole,createdBy,creationDate,modifyBy,modifyDate      FROM smbms_user//(表名)
     where
     //id(列名)=#{id}(参数名id)
     id=#{id}    
   </select>
</mapper>

调用

public class MybatisUtils {
	//mybatis的核心类二 SqlSessionFactory
	private static SqlSessionFactory sqlSessionFactory = null;
	static {
		String resource = "mybatis-config.xml";
		InputStream inputStream = null;
		try {
			//获取资源文件
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}
		//获取SqlSession工厂
		//mybatis的核心类一 SqlSessionFactoryBuilder
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}

	/**
	 * 获取sqlSession
	 */
	 //mybatis的核心类三 SqlSession
	public static SqlSession getSqlSession() {
		return sqlSessionFactory.openSession();
	}
	/**
	 * 关闭sqlSession
	 */
	public static void closeSession(SqlSession sqlSession) {
		if(null != sqlSession) {
			sqlSession.close();			
		}
	}
}

		//获取myabtis核心类SqlSession
		SqlSession sqlSession = MybatisUtils.getSqlSession();
		//通过反射机制获取UserDao的实现类
		UserDao userDao = sqlSession.getMapper(UserDao.class);
		//直接封装成User对象
		User user = userDao.getUserById("1");
		System.out.println(user);

通过使用mybatis,将数据库驱动的加载,连接的建立,数据的类对象封装这些改成了配置化文件中,我们也不用实现UserDao接口,我们获取User的实例只需要三步即可完成,省去了数据库驱动加载,数据库连接建立,数据封装。
而且当你需要其他的dao层时,只需在配置mybatis配置文件中加入映射文件的地址即可。其他只需要写dao层接口以及xml映射文件。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值