Mybatis入门

框架

框架是一个应用程序的半成品,提供可重用的公共结构(比如之前的BaseDao)。

作用:

  1. 加快开发效率,重用代码可以节省开发者的时间和精力。
  2. 结构统一,易于维护
  3. 专心在业务实现上

Mybatis

Mybatis中文文档:https://mybatis.org/mybatis-3/zh/index.html

什么是Mybatis

原本是Apache的一个开源项目IBatis,2010年改名为MyBatis。

  • MyBatis 是一款优秀的持久层框架
  • 它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  • MyBatis可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

其实Mybatis就是一个数据库访问的框架,能够帮助简化数据库的操作。

持久层

持久层可以将业务数据存储到磁盘,具备长期存储能力,只要磁盘不损坏,在断电或其他情况下,重启仍然可以读取到这些数据。持久层的缺点就是比较慢。

MyBatis环境搭建

用一个mybatis的具体案例来搭建环境。

1,下载jar包 打开GitHub官网,搜索Mybatis

选择:

Mybatis入门

版本下载:

Mybatis入门

其中下载zip:

Mybatis入门

解压后使用:

mybatis-3.4.6.jar:这个是mybatis的核心包

2,导包,需要导入mybatis核心包和mysql驱动包

3,创建一个实体类,跟数据库中的列名保持一致

package com.xl.pojo;

public class User {

	private int userId;
	private String loginName;
	private String loginPwd;
	private String userName;
	private char sex;
	private String bornDate;
	
	public User() {
		super();
	}
	public User(int userId, String loginName, String loginPwd, String userName, char sex, String bornDate) {
		super();
		this.userId = userId;
		this.loginName = loginName;
		this.loginPwd = loginPwd;
		this.userName = userName;
		this.sex = sex;
		this.bornDate = bornDate;
	}
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getLoginName() {
		return loginName;
	}
	public void setLoginName(String loginName) {
		this.loginName = loginName;
	}
	public String getLoginPwd() {
		return loginPwd;
	}
	public void setLoginPwd(String loginPwd) {
		this.loginPwd = loginPwd;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}
	public String getBornDate() {
		return bornDate;
	}
	public void setBornDate(String bornDate) {
		this.bornDate = bornDate;
	}
	@Override
	public String toString() {
		return "User [userId=" + userId + ", loginName=" + loginName + ", loginPwd=" + loginPwd + ", userName="
				+ userName + ", sex=" + sex + ", bornDate=" + bornDate + "]";
	}
	
}

4,创建mybatis核心配置文件:mybatis-config.xml

? 包含对mybatis系统的核心设置

? 包含获取数据库连接的数据源 ---> <dataSource type="POOLED">

? 决定事务范围和控制的事物管理器 ---> <transactionManager type="JDBC"/>

<configuration>
	<!--多个运行环境:默认为开发环境-->
    <environments default="development">
    	<!--单个运行环境-->
        <environment id="development">
        	<!--事务管理机制-->
            <transactionManager type="JDBC"/>
            <!--数据源 mybatis自带的数据源POOLED-->
            <dataSource type="POOLED">
            	<property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/数据库名"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

5,创建映射文件:

<mapper namespace="a"> <!--namespace:命名空间,通过这个名字找到映射文件-->
    <!--select:查询 id:唯一标识 resultType:返回类型-->
    <select id="getAll" resultType="com.xl.pojo.User">
    	select * from `user`
    </select>
</mapper>

注:创建好映射文件后,在mybatis核心配置文件中指定

<mappers>
	<mapper resource="映射文件所在位置,以/分开"/>
</mappers>

6,测试:

SqlSession session = null;
try{
    //1,读取配置文件,将数据放入输入流中
    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
    //2,创建SqlSessionFactory对象,为了生成SqlSession对象
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    //3,创建SqlSession对象 = (JDBC中的Connection对象)
    session = factory.openSession();
    //4,调用mapper文件中的方法  参数为:命名空间名称+sql映射的id
    List<User> list = session.selectList("a.getAll"); //这里的调用方法其实比较麻烦,后面用接口解决这个问题
    for(User user : list) {
        System.out.println(user.toString());
    }
}catch (IOException e) {
    e.printStackTrace();
}finally {
    //5,关闭session对象
    session.close();
}

Mybatis映射接口

基于mapper接口实现

1,创建接口,这个接口相当于之前的UserDao

public interface UserMapper{
    /**
	 * 查询所有User
	 * @return
	 */
	List<User> getAllUser();
}

2,修改映射文件mapper.xml中的namespace

<mapper namespace="com.xl.UserMapper"> <!--必须跟相对应的接口全路径同名-->
    <!--select:查询 id:接口中的方法名 resultType:泛型类型-->
    <select id="getAll" resultType="com.xl.pojo.User">
    	select * from `user`
    </select>
</mapper>

3,测试类:调用getMapper(接口名.class)方法,执行接口中的方法来实现对数据库的操作

List<User> list = session.getMapper(UserMapper.class).getAllUser();

最后的包结构如下:

Mybatis入门

Mybatis入门

上一篇:VC中获取窗体句柄的各种方法


下一篇:数据结构之链表