MyBatis动态代理快速入门

mybatis是什么:

mybatis是一套orm框架,实现了对jdbc的轻量级封装,能够实现动态SQL拼接,结果集解析。

简单来说:你不需要再写jdbc连接和dao实现了。

什么是rom?

对象-关系映射(Object/Relation Mapping),一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。

前置技能:

Java、JDBC 、mySQL

Getting Started:

1、导入mybatis核心jar包、mysql驱动包

在这里插入图片描述

2、在数据库创建一个员工表(staff),并创建对应的Java类

tb_staff 建表信息

CREATE TABLE `tb_staff` (
  `uid` int(4) NOT NULL COMMENT '员工Id',
  `uname` char(7) NOT NULL DEFAULT 'staff' COMMENT '员工用户名',
  `pwd` char(7) NOT NULL DEFAULT '123' COMMENT '员工密码',
  `did` tinyint(2) NOT NULL DEFAULT '1' COMMENT '所属部门编号',
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

tb_staff 表
在这里插入图片描述
Staff.java

public class Staff {
	//员工账号id  用户名   密码  所属部门id
	private Integer uid;
	private String uname;
	private String pwd;
	private Integer did;
}
3、创建mybatis核心配置xml

mybatis-configs.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>
   <!-- 环境,可以配置多个。   default:默认采用哪个环境 -->
   <environments default="test">
      <environment id="test">
         <!-- 事务管理器 -->
         <transactionManager type="JDBC" />
         <!-- 数据源,池类型的数据源 -->
         <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/database" />
            <property name="username" value="root" />
            <property name="password" value="123456" />
         </dataSource>
      </environment>
   </environments>

      <!--使用路径引入对象映射配置文件 可以引入多个 -->
	<mappers>
		<mapper resource="com/java/dao/staff-mapper.xml"/>
		<mapper resource="com/java/dao/department-mapper.xml"/>
	</mappers>
   
  </configuration>
4、为 Staff 类创建对应的dao

IStaffDao.java

public interface IStaffDao {
	//根据需求写  查 增 删 改
	Staff selectById(int id);	
	List<Staff> selectAll();
	int insert(Staff staff);
	int delete(int uid);
	int update(Staff staff);
}
5、创建mapper映射文件

staff-mapper.xml
映射文件中每一个insertdeleteupdateselect标签对应dao中的一个方法。

<?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:对应IStaffDao接口的全路径-->
<mapper namespace="com.java.dao.IStaffDao">
	 <!-- 根据id查询
 	id:                     对应IStaffDao中的方法名
 	resultType:             对应selectById()方法的返回类型(Staff)
 	parameterType:          对应selectById()方法的参数类型
 	(resultType、parameterType   如果不是Java类型内建的相应的类型,需要写全路径名)
 	#{对应staff对象的属性名}    如果sql语句参数只有一个,可以填任意
     -->
    <select id="selectById" resultType="com.java.entity.Staff" parameterType="int">
        SELECT* FROM tb_staff WHERE uid = #{uid}
    </select>
    
	 <!-- 查询方法
 	id:                     对应IStaffDao中的方法名
 	resultType:             如果结果类型为List,写List中对象的类型(Staff)
 	parameterType:          没有就不写
     -->
    <select id="selectAll" resultType="com.java.entity.Staff">
       SELECT* FROM tb_staff
    </select>

 <!-- 新增方法
 	id:                     对应IStaffDao中的方法名
 	resultType:             增、删、改 返回结果为 受影响的行数
 	parameterType:          对应insert()方法的参数类型
     -->
    <insert id="insert"  parameterType="com.java.entity.Staff">
        INSERT INTO tb_user (uid,uname,pwd,did) VALUES
        (#{uid},#{uname},#{pwd},#{did});
    </insert>
    
     <!-- 修改方法
 	id:                     对应IStaffDao中的方法名
 	resultType:             增、删、改返回结果为 受影响的行数
 	parameterType:          对应update()方法的参数类型
 	#{对应staff对象的属性名}    
     -->
    <update id="update" parameterType="com.java.entity.Staff">
        UPDATE tb_staff 
        <!-- 生成set关键字,并忽略最后的逗号-->
        <set>
        	<!-- 如果if标签test的判断为true,添加此段sql表达式-->
            <if test="uname!=null">uname= #{uname},</if>
            <if test="pwd!=null">pwd= #{pwd},</if>
            <if test="did!=null">name = #{did},</if>
        </set>
		WHERE uid = #{uid}
    </update>
    
     <!-- 删除方法
 	id:                     对应IStaffDao中的方法名
 	resultType:             增、删、改返回结果为 受影响的行数
 	parameterType:          对应delete()方法的参数类型
 	#{对应staff对象的属性名}    
     -->
    <delete id="delete" parameterType="int">
        DELETE FROM tb_staff WHERE uid = #{uid}
    </delete>
</mapper>
6、使用

Test.java

public class Test{
	public static void main(String[] args) {
		//读取src文件夹下的xml文件 使用xml配置文件创建 SqlSession工厂对象
		InputStream in=Test.class.getClassLoader().getResourceAsStream("mybatis-configs.xml");
		SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);	
		// 得到数据库会话对象
		SqlSession session=factory.openSession();

		//得到dao的实现类对象
		//我们不需要关心其实现,只要xml配置正确,mybatis自己生成实现类
		IStaffDao dao=session.getMapper(IStaffDao.class);
		//使用dao的增删改查方法
		//我们不需要关心其实现,只要xml配置正确,mybatis自己会实现这些方法
		List<Staff> list=dao.selectAll();
	
		Staff staff=dao.selectById(1001);
		staff.setUid("1002");
		staff.setUname("admin");
		staff.setPwd("123456");
		
		int result=dao.delete(1001);
		dao.update(staff);
		
		//提交修改
		session.commit();
		//关闭连接
		session.close();
	}
}
*7、结束

看到这里,我们已经使用mybatis完成了数据库连接实现dao和基本的增删改查,对mybatis有了初步的认识。
但这些只是mybatis的功能里最基础的部分,想要熟练mybatis还是需要研读官方文档,并多加练习。
写这篇博文的目的是为了帮助想学习mybatis的同学进行一个快速入门,我一直认为,学习一门技术的第一步都应该是Getting Started,完成第一个实例,有基本的概念,再去学习会容易许多。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值