MyBatis Day01(20210922)

一.简介
  • 帮助程序员将数据存入到数据库中
  • 传统的JDBC代码太复杂。
  • 不用Mybatis也可以。更容易上手。
  • 特性:简单易学,灵活,解除sql与程序代码的耦合,提供映射标签,提供对象关系映射标签,提供xml标签,支持编写动态sql
二.原理图

在这里插入图片描述
在这里插入图片描述

三.编码过程
3.1导入jar包

在这里插入图片描述

3.2 创建Source Folder(代码文件夹) config

在这里插入图片描述

3.3在config下创建配置文件

在这里插入图片描述

  • log4j.properties(日志文件)
#全局log日志配置
#在开发环境下日志级别要设置成debug,生产环境设置成info或者error
log4j.rootLogger = debug,stdout
 
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
  • SqlMapConfig.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>
    <environments default="mysql">
        <!-- 配置mysql的环境-->
        <environment id="mysql">
            <!-- 配置事务 -->
            <transactionManager type="JDBC"/>

            <!--配置连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="admin"/>
            </dataSource>
        </environment>
    </environments>
    
    <!-- 配置映射文件的位置 -->
    <mappers>
		<mapper resource="sqlmap/DeptMapper.xml"/>
	</mappers>
	
</configuration>
3.4 在config下创建包sqlmap(Package)用于存放映射文件

在这里插入图片描述

3.5 创建com.neuedu.pojo包用于存放javabean

在这里插入图片描述

package com.neuedu.pojo;

public class Dept {
	
	private int deptno;
	private String dname;
	private String loc;
	
	public int getDeptno() {
		return deptno;
	}
	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}
	public String getDname() {
		return dname;
	}
	public void setDname(String dname) {
		this.dname = dname;
	}
	public String getLoc() {
		return loc;
	}
	public void setLoc(String loc) {
		this.loc = loc;
	}
	
}

3.6 编写映射文件(DeptMapper.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命名空间,作用就是对sql进行分类化管理,使用mapper代理方法开发, 
	namespace有重要作用,不要重复。 
-->
<mapper namespace="test">
	<!-- 在映射文件中可以配置很多sql语句块 -->
	
	<!-- 1.根据部门ID查询部门信息 -->
		属性id:表示映射文件中的sql,具有唯一标识性;
		属性parameterType:指定输入参数的数据类型(这里指定int类型);
		属性resultType:指定sql输出结果集映射的java对象类型;
		#{}:表示一个占位符;
		#{deptno}:其中的deptno表示输入的参数,参数名称就是deptno;
		如果参数的类型是简单类型,#{}中的参数名可以任意,可以是value或者其他名称-->		
	<select id="findDeptByid" parameterType="int" resultType="com.neuedu.pojo.Dept">
		select * from dept where deptno = #{deptno}
	</select>
	
	<!-- 2.根据名字模糊查询 -->	
		属性resultType:指的是单条记录所映射的java对象类型(即使结果集为list,该属性值也是单条记录的类型);
		${}:表示拼接sql语句,将接收到的参数直接拼接在sql中;
		${value}:可以将接收输入的参数加以处理拼接在sql中;
		如果传入的是简单类型,${}中只能写value;
		注意:${}存在sql问题,安全性低;解决方式在《MyBatis K01(20211006)模糊查询中-->	
	<select id="findDeptByName" parameterType="java.lang.String" resultType="com.neuedu.pojo.Dept">
		select * from dept where dname like '%${value}%'
	</select>
	
	<!-- 3.添加用户 -->
		parameterType属性:指定输入参数的类型;
		#{}中指定了pojo类的属性名,接收了pojo对象的属性值;
		注意:此时花括号中的内容必须与pojo类的属性名一致,而其他#{}处则没有要求;-->
	<insert id="insertDept" parameterType="com.neuedu.pojo.Dept">
		insert into dept(dname,loc) values(#{dname},#{loc});
	</insert>
	
	<!-- 4.删除用户 -->
	 <delete id="deleteDept" parameterType="int">
	 	delete from dept where deptno = #{deptno}
	 </delete>
	 
	<!-- 5.修改用户 -->
		parameterType属性:指的是dept对象(包括deptno和更新的信息);
		#{loc}:从输入对象中获取loc的属性值
		注意:此时花括号中的内容必须与pojo类的属性名一致,而其他#{}处则没有要求;-->
	<update id="updateDept" parameterType="com.neuedu.pojo.Dept">
		update dept set dname = #{dname} ,loc = #{loc} where deptno = #{deptno};
	</update>
	
</mapper>
3.7 编写运行测试类(DeptTest.java)
  • 编写步骤:
    1.定义mybaties的配置文件路径;
    2.得到配置文件流;
    3.创建会话工厂,传入mybaties的配置文件流;
    4.通过工厂创建sqlSession;
    5.通过sqlSession操作数据库;
    6.提交事务(增删改需要,查询跳过);
    7.关闭资源;
public class DeptTest {

	/**
	 * 根据ID查询部门信息
	 * @throws IOException
	 */
	
	@Test // 单元测试
	public void findDeptById() throws IOException {
		// 定义mybaties的配置文件路径
		String resource = "SqlMapConfig.xml";
		// 得到配置文件流
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 创建会话工厂,传入mybaties的配置文件流
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 通过工厂创建sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();

		// 通过sqlSession操作数据库
		// 第一个参数:映射文件中statement的id:namespace +"."+ statement的id
		// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
		Dept dept = sqlSession.selectOne("test.findDeptByid", 10);
		System.out.println(dept);

		// 释放资源
		sqlSession.close();

	}

	/**
	 * 根据名字模糊查询
	 * @throws IOException
	 */
	@Test
	public void findDeptByName() throws IOException {
		// 定义mybaties的配置文件路径
		String resource = "SqlMapConfig.xml";
		// 得到配置文件流
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 创建会话工厂,传入mybaties的配置文件流
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 通过工厂创建sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		// 通过sqlSession操作数据库
		//List<Dept> deptList = sqlSession.selectList("test.findDeptByName", "发");
		
		//这里存在sql注入问题,如下例经测试会查出所有记录
		List<Dept> deptList = sqlSession.selectList("test.findDeptByName", "发%' or 1=1 or loc like '%a");
		
		System.out.println(deptList);
		//关闭资源
		sqlSession.close();

	}

	/**
	 * 插入部门信息
	 */
	@Test
	public void insertDept() throws IOException {
		// 定义mybaties的配置文件路径
		String resource = "SqlMapConfig.xml";
		// 得到配置文件流
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 创建会话工厂,传入mybaties的配置文件流
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 通过工厂创建sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		// 创建Dept对象封装数据
		Dept dept = new Dept();
		dept.setDname("总裁办");
		dept.setLoc("软件园");
		// 通过sqlSession操作数据库
		// 第二个参数:直接穿对象即可
		sqlSession.insert("test.insertDept", dept);
		// 提交事务,修改表数据时需要提交事务
		sqlSession.commit();
		//关闭资源
		sqlSession.close();
	}
	
	/**
	 * 删除用户
	 * @throws IOException 
	 */
	@Test
	public void deleteDept() throws IOException {
		// 定义mybaties的配置文件路径
		String resource = "SqlMapConfig.xml";
		// 得到配置文件流
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 创建会话工厂,传入mybaties的配置文件流
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 通过工厂创建sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//通过sqlSession操作数据库
		sqlSession.delete("test.deleteDept",105);
		//提交事务
		sqlSession.commit();
		//关闭资源
		sqlSession.close();
	}
	
	/**
	 * 修改用户信息
	 */
	@Test
	public void updateDept() throws IOException {
		// 定义mybaties的配置文件路径
		String resource = "SqlMapConfig.xml";
		// 得到配置文件流
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 创建会话工厂,传入mybaties的配置文件流
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		// 通过工厂创建sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		Dept dept = new Dept();
		dept.setDeptno(103);
		dept.setDname("总裁办");
		dept.setLoc("软件园ggg");
		//通过sqlSession操作数据库
		sqlSession.update("test.updateDept",dept);
		//提交事务
		sqlSession.commit();
		//关闭资源
		sqlSession.close();
	}

}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值