掌握点
- 掌握MyBati中常用API的使用方法
- 正确编写MyBatis的配置文件
- 正确编写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是一个配置属性的元素,该元素通常用于将内部的配置外在话,即通过外部的配置文件动态地替换内部定义的属性。常用的如数据库的连接等属性。
- driver:mysql的驱动
- url:数据库的url地址。localhost本地地址。替换localhost为192./././地址则访问该地址的数据库
- username:root
- 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语句。
- 查询:sqlSession.selectOne()
- 添加:sqlSession.insert()
- 修改:sqlSession.update()
- 删除:sqlSession.delete()
其中
SqlSession sqlSession=null; sqlSession=SrudnetUtils.getSession(); sqlSession._...... sqlSession.commit();//这行代码不写则无法使用添加修改删除的功能
略