mybatis:基础&开发步骤

Mybatis基础

一. mybatis简介

Mybatis:

  • 1.基于java的持久层(dao)框架,封装了jdbc,开发者只需关注sql语句本身;
  • 2.通过xml或注解方式,将java对象与sql参数映射成最终的sql语句;
  • 3.执行sql语句并将结果集以java对象形式返回

二. 开发步骤

1. 添加MyBatis的坐标

  • pom.xml:
    mysql-connector-java♥
    mybatis♥
    junit
    log4j

2. 创建user数据表

3. 编写User实体类

	id,username,password

4. 编写映射文件UserMapper.xml

  • 内容:描述sql语句
  • 位置:resources/com.itheima.mapper/UserMapper.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>
				<!--添加组件-->
			</mapper>
  • 配置mapper组件:
    • resultType:返回结果集类型
    • namespace:命名空间
    • parameterType:传入参数类型
			<mapper namespace="userMapper">
				<!--删除操作-->
    			<delete id="delete" parameterType="int">
        			delete from user where id=#{abc}
    			</delete>
    			
    			<!--修改操作-->
    			<update id="update" parameterType="com.itheima.domain.User">
        			update user set username=#{username},password=#{password} where id=#{id}
	   			 </update>

    			<!--插入操作-->
		   		<insert id="save" parameterType="com.itheima.domain.User">
        			insert into user values(#{id},#{username},#{password})
    			</insert>
    			
    			<!--根据id进行查询-->
    			<select id="findById" resultType="user" parameterType="int">
        			select * from user where id=#{id}
    			</select>
			</mapper>

5. 编写核心文件SqlMapConfig.xml

  • 位置:resources/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>
				<!--添加组件-->
			</configuration>
  • 配置组件:
			<!--通过properties标签加载外部properties文件-->
    		<properties resource="jdbc.properties"></properties>
			<!--数据源环境:-->
			<environments default="developement">
       		    <environment id="developement">
            		<transactionManager type="JDBC"></transactionManager>
            		<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>
    		<!--加载映射文件-->
    		<mappers>
       			<mapper resource="com/itheima/mapper/UserMapper.xml"></mapper>
    		</mappers>
  • jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

6. 编写测试类

  • 位置:MyBatisTest.class
  • 测试方法:test1()
    @Test
    //查询操作
    public void test1() throws IOException {
        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作  参数:namespace+id
        List<User> userList = sqlSession.selectList("userMapper.findAll");
        //打印数据
        System.out.println(userList);
        //释放资源
        sqlSession.close();
    }

7. 测试:执行test1()

三. 添加增删改功能

1. 插入操作

添加mapper

插入的标签:insert
parameterType:插入的指定类型,测试方法中已封装好的user对象
#{实体属性名}:实体的属性名

    <insert id="save" parameterType="com.itheima.domain.User">
        insert into user values(#{id},#{username},#{password})
    </insert>
添加测试类

插入api:sqlSession.insert(“命名空间”,实体对象)
mybatis若要执行update操作,需要通过会话对象sqlSession对象来提交事务:sqlSession.commit();

   public void test2() throws IOException {

        //模拟user对象,先将数据封装成user对象,方便传入mapper
        User user = new User();
        user.setUsername("xxx");
        user.setPassword("abc");

        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //执行操作  参数:namespace+id
        sqlSession.insert("userMapper.save",user);

        //mybatis执行更新操作  提交事务
        sqlSession.commit();

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

2. 修改操作

添加mapper

插入的标签:update
parameterType:插入的指定类型,测试方法中已封装好的user对象
#{实体属性名}:实体的属性名

   	<update id="update" parameterType="com.itheima.domain.User">
        update user set username=#{username},password=#{password} where id=#{id}
    </update>
添加测试类

修改api:sqlSession.update(“命名空间”,实体对象)
mybatis若要执行update操作,需要通过会话对象sqlSession对象来提交事务:sqlSession.commit();

    @Test
    //修改操作
    public void test3() throws IOException {

        //模拟user对象
        User user = new User();
        user.setId(7);
        user.setUsername("lucy");
        user.setPassword("123");

        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作  参数:namespace+id
        sqlSession.update("userMapper.update",user);

        //mybatis执行更新操作  提交事务
        sqlSession.commit();

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

3. 删除操作

添加mapper

删除的标签:delete
parameterType:(根据id删除,故传入的参数为id),即int类型,
#{名称}:只有一个参数时,名称可任意写。方便可读性,故写id

    <delete id="delete" parameterType="int">
        delete from user where id=#{abc}
    </delete>
添加测试类

删除api:sqlSession.delete(“命名空间.id”,参数); 参数为条件

    @Test
    //删除操作
    public void test4() throws IOException {

        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作  参数:namespace+id
        sqlSession.delete("userMapper.delete",8);

        //mybatis执行更新操作  提交事务
        sqlSession.commit();

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

四. MyBatis的API(测试方法使用)

如何执行mapper方法:

  • 1.获得核心配置文件:

    • InputStream resourceAsStream = Resources.getResourceAsStream(“sqlMapConfig.xml”);
    • Resources为工具类,在ibatis.io包中,帮助加载资源文件
  • 2.获得session工厂对象

    • SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
  • 3.获得session会话对象

    • SqlSession sqlSession = sqlSessionFactory.openSession();
    • 注:创建SqlSession实例,有两个方法
      openSession():默认开启一个事务,但不会自动提交。需要手动提交事务:commit()
      openSession(boolean autoCommit):参数为true时,自动提交事务
  • 4.执行findAll

    • sqlSession.select(“userMapper.findAll”);
  • 5.关闭sqlSession

    • sqlSession.close();

MyBatis的DAO实现

1.传统方式

  1. UserDao或叫UserMapper
  2. UserMapperImpl
  3. 在配置文件添加sql操作标签
  4. UserService创建main()测试

2.代理开发方式

  1. 介绍:只需要编写Mapper(Dao)接口,由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体即之前的MapperImpl的方法体。相当于xml文件中的mapper标签即MpperImpl。
  2. 要求:
    1. 限定名:Mapper.xml文件中的namespace与mapper接口的全限定名相同
    2. 方法名:Mapper.xml文件定义的每个statement的id与mapper接口的全方法名相同
    3. 输入参数:Mapper.xml文件中定义的每个sql的parameterType的类型与mapper接口输入参数类型相同。(User的集合与User也可以对应)
    4. 返回值:Mapper.xml文件中定义的每个sql的resultType的类型与mapper接口的返回值相同
      在这里插入图片描述
  3. 代理测试:
    执行操作分为两步:1.获取mapper对象,2.利用mapper执行操作
   @Test
    //查询操作
    public void test1() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        
        //List<User> userList = sqlSession.selectList("userMapper.findAll");
        //换成代理方式
        //1.获取mapper对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //2.执行操作
        List<User> userList = userMapper.findAll();
        
        System.out.println(userList);
        sqlSession.close();
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值