Mybatis入门(一)-- 柚子真好吃

前言:本人刚刚入行小白,处于学习阶段,文章可能含有些许错误和较多瑕疵。望各位大神多多指教~~

一、Mybatis简介

在这里插入图片描述

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,
将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

二、Mybatis环境搭建

  1. 首先需要下载Mybatis,下载地址:https://github.com/mybatis/mybatis-3/releases
    进入网页后如图点击;在这里插入图片描述
  2. 下载后解压文件即可,其中我们需要的是
    mybatis-3.4.6.jar-------------------核心包
    /lib/文件夹下所有的jar包---------依赖包
  3. 将以上全部jar包 导入 MyEclipse 下的/WEB-INF/lib 下,这样基本环境就搭建完成了;

三、Mybatis前期的准备工作

  1. 创建日志配置文件(可做可不做)目的是清楚查看控制台的输出
    log4j.properties

    log4j.rootLogger=debug, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.err
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] %m%n
    
  2. 创建数据库,本例使用 Navicat (俗称:猫爪子)
    1)创建数据库名称为‘shop’(可自行定义名称)
    2)创建’user’表,包含字段id,username,password,role,desci
    3)表中插入相应数据
    在这里插入图片描述

  3. 创建实体类(User.java)

package com.redfield.pojo;

/**
 * @author Redfield
 *
 * @date 2019年1月1日
 */
public class User {
	private int id;
	private String username;
	private String password;
	private String role;
	private String desci;
	//无参构造
	public User() {
		super();
	}
	//有参构造
	public User(int id, String username, String password, String role, String desci) {
		super();
		this.id = id;
		this.username = username;
		this.password = password;
		this.role = role;
		this.desci = desci;
	}
	//getter 和 setter 方法
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getRole() {
		return role;
	}

	public void setRole(String role) {
		this.role = role;
	}

	public String getDesci() {
		return desci;
	}

	public void setDesci(String desci) {
		this.desci = desci;
	}
	//重写toString方法,方便测试查看信息
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password=" + password + ", role=" + role + ", desci="
				+ desci + "]";
	}

}

四、Mybatis工作原理

在这里插入图片描述

  1. 读取MyBatis配置文件applicationContext-mapper.xml。该文件作为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,其主要内容为获取数据库的连接。
  2. 加载映射文件UserMapper.xml。UserMapper.xml即SQL映射文件,该文件中配置操作数据库的SQL语句,需要在applicationContext-mapper.xml文件中加载。
  3. 构建会话工厂。通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory。
  4. 创建SqlSession对象。由会话工厂创建SqlSession对象,该对象中包含了执行SQL的所有方法。
  5. MyBatis底层定义一个 Executor 接口来操作数据库,它会根据SqlSession传递的参数动态生成需要执行的SQL语句,同时负责查询缓存的维护。
  6. 在Executor 接口的执行方法中,包含一个MappedStatement类型的参数,该参数是对映射信息的封装,用于储存要映射的SQL语句的id,参数信息。

五、Mybatis基础实现

  1. 编写MyBatis配置文件applicationContext-mapper.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">
<!-- development为开发模式 -->
<configuration>
   <environments default="development">
   	<!-- 每个 environment 元素定义的环境 ID -->
   	<environment id="development">
   		<!-- 事务管理器JDBC -->
   		<transactionManager type="JDBC" />
   		<!-- 数据库连接池 -->
   		<dataSource type="POOLED">
   			<property name="driver" value="com.mysql.jdbc.Driver" />
   			<property name="url"
   				value="jdbc:mysql://localhost:3306/shop" />
   			<property name="username" value="root" />
   			<property name="password" value="123456" />
   		</dataSource>
   	</environment>
   </environments>

   <mappers>
   	<mapper resource="com/redfield/mapper/UserMapper.xml" />
   </mappers>

</configuration>
  1. 创建映射文件com.redfield.mapper包,并在其中创建UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.redfield.mapper.UserMapper">
	<select id="selectAllUsers" resultType="com.redfield.pojo.User">
		select * from user;
	</select>
	<insert id="insertOneUser" parameterType="com.redfield.pojo.User">
		insert into
		user(id,username,password,role,desci) 
		values(#{id},#{username},#{password},#{role},#{desci})
	</insert>
</mapper>

         ①namespace:指定唯一的命名空间;
         ②select 标签:用于配置查询操作的信息;
         ③insert 标签:用于配置添加操作的信息;
         ④id:代表元素在映射文件中的唯一标识;
         ⑤resultType:返回值类型;
         ⑥parameterType:传递的参数的类型;
         ⑦#{xxx} xxx代表User对象类型的属性;

  1. 测试类编写Test01.java

    ①查询功能实现

    public static void main(String[] args) {
    	//加载配置文件 applicationContext-mapper.xml
    	InputStream is = Test01.class.getClassLoader().getResourceAsStream("applicationContext-mapper.xml");
    	//构建 SqlSessionFactory
    	SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
    	//构建SqlSession
    	SqlSession session = sessionFactory.openSession();
    	//执行查询操作,并用List集合接收
    	List<User> list = session.selectList("com.redfield.mapper.UserMapper.selectAllUsers");
    	for (User user : list) {
    		System.out.println(user);	//输出
    	}
    }
    

    ②控制台输出
    在这里插入图片描述
    ③添加功能实现

    	User user = new User();		//创建User对象
    	user.setId(1003);				//添加属性
    	user.setUsername("SmallGreen");
    	user.setPassword("lili");
    	user.setRole("admin");
    	user.setDesci("绿绿绿");
    	int i = session.insert("com.redfield.mapper.UserMapper.insertOneUser", user);
    	System.out.println(i);
    

    ④控制台输出
    在这里插入图片描述我们可以看到控制台输出了“1”,说明添加操作成功了! 下面来看下数据库中的数据

idusernamepasswordroledesci
1001Redfield123userss
1002Green123adminss

然而数据并没有添加,这是为什么呢?

原因很简单,是因为我们少了一条提交语句

		//提交事务
		session.commit();
		//关闭SqlSession
		session.close();

这样过后我们再查询数据库就会发现有数据了

idusernamepasswordroledesci
1001Redfield123userss
1002Green123adminss
1003SmallGreenliliadmin绿绿绿

这样我们简单的MyBatis的程序就执行完成了~~~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小金毛

可怜可怜孩子吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值