mybatis笔记(记录)

一.MyBatis基础知识

掌握点

  1. 掌握MyBati中常用API的使用方法
  2. 正确编写MyBatis的配置文件
  3. 正确编写MyBatis中的映射文件

MyBatis是一款优秀的持久层框架,它支持制定化SQL,储存过程以及高级映射。MyBatis将JDBC进行了封装,避免了直接使用JDBC操作数据库()。MyBatis可以使用简单的①XML或者②注解配置映射类和表之间的关系,将接口和JAVA的POJO(Plain Ordinary Java Object,普通的Java对象)映射成数据库中记录。

MyBatis的开发环境配置

MyBatis的配置文件

在web.xml中添加filter标签,设置编码为UTF-8

<filter>
	<filter-name>encoding</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<async-supported>true</async-supported>
	<init-param>
	  <param-name>encoding</param-name>
	  <param-value>utf-8</param-value>
	</init-param>
	<init-param>
	  <param-name>forceEncoding</param-name>
	  <param-value>true</param-value>
	</init-param>
  </filter>
properties元素

properties是一个配置属性的元素,该元素通常用于将内部的配置外在话,即通过外部的配置文件动态地替换内部定义的属性。常用的如数据库的连接等属性。

  1. driver:mysql的驱动
  2. url:数据库的url地址。localhost本地地址。替换localhost为192./././地址则访问该地址的数据库
  3. username:root
  4. password:数据库的密码

db.properties的配置文件,文件内容如下:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

在有了db.properties属性文件的导入,就可以修改配置文件中连接数据库的信息,代码如下:
mybatis-config.xml

<configuration>
	<properties resource="db.properties"/>
	<!-- 定义别名 -->
	<typeAliases>
		<package name="com.po"/>
	</typeAliases>
	<!--  配置环境,默认的环境id为mysql-->
	<environments default="mysql">
	<!--  配置id为mysql的数据库环境-->
		<environment id="mysql">
			<!--  使用jdbc的事务管理-->
			<transactionManager type="JDBC"/>
			<!--  数据库连接池-->
			<dataSource type="POOLED">
				<!--  数据库驱动-->
				<property name="driver" value="${jdbc.driver}"/>

				<!--  连接数据库-->
				<property name="url" value="${jdbc.url}"/>

				<!--  连接数据库的用户名-->
				<property name="username" value="${jdbc.username}"/>

				<!--  连接数据库的密码-->
				<property name="password" value="${jdbc.password}"/>
			</dataSource>
		</environment>
	</environments>

	<!--  配置mapper的位置-->
	<mappers>
		<mapper resource="com/mapper/StudentMapper.xml"/>
	</mappers>
</configuration>

在配置好数据库的配置文件后
在com.utils包中写一个SrudnetUtils.java类,用来获取可以操作数据的对象。

package com.utils;

import java.io.IOException;
import java.io.Reader;

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 SrudnetUtils {
//	初始化sqlSessionFactory对象
	private static SqlSessionFactory sqlSessionFactory=null;

	static {
		Reader reader;
		try {
//			使用MyBatis提供的Resources类加载MyBatis的配置文件
			reader = Resources.getResourceAsReader("mybatis-config.xml");
//			构建sqlSessionFactory工厂
			sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}

	}
//	获取SqlSession对象的静态方法
	public static SqlSession getSession() {
		return sqlSessionFactory.openSession();
	}

}

完成工具类后
在com.po包中创建一个实体类Student.java

package com.po;

import javax.validation.constraints.NotEmpty;

import org.hibernate.validator.constraints.Range;

public class Student {
	private Integer id;
	@NotEmpty(message = "学号不能为空!!!")
	private String loginname;
	@NotEmpty(message = "用户名不能为空!!!")
	private String username;
	@Range(min = 15,max = 50,message = "年龄应在15到50之间")
	private Integer age;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getLoginname() {
		return loginname;
	}
	public void setLoginname(String loginname) {
		this.loginname = loginname;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}


}

在com.mapper包中创建映射文件
StudentMapper.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.mapper.StudentMapper">
	<insert id="inserStudent" parameterType="com.po.Student" keyProperty="id" useGeneratedKeys="true">
		insert into student(loginname,username,age) values(#{loginname},#{username},#{age})
	</insert>

	<update id="updateStudent" parameterType="com.po.Student" keyProperty="id" useGeneratedKeys="true">
		update student set username=#{username},age=#{age} where loginname=#{loginname}
	</update>

	<delete id="deleteStudent" parameterType="String">
		delete from student where loginname=#{loginname}
	</delete>
  </mapper>

最后创建测试类
在测试用例中调用SrudnetUtils.java类中的SqlSession()得到一个SqlSession的实例sqlSession,相当于得到一个数据库的连接,通过sqlSession的方法执行在映射文件中指定的SQL语句。

  1. 查询:sqlSession.selectOne()
  2. 添加:sqlSession.insert()
  3. 修改:sqlSession.update()
  4. 删除:sqlSession.delete()

其中

SqlSession sqlSession=null;
sqlSession=SrudnetUtils.getSession();
sqlSession._......
sqlSession.commit();//这行代码不写则无法使用添加修改删除的功能

上一篇:MySql中使用日期函数获取昨天的数据


下一篇:git分支重命名