mybatis开发使用(xml)

一、新增maven项目,引入mybatis依赖

<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<scope>runtime</scope>
</dependency>

项目结构:
在这里插入图片描述

二、创建user表

create table user(
	id int(10) primary key not null auto_increment,
	username varchar(10),
	password varchar(10)
);

三、编写user实体类

在这里插入图片描述
此处省略get、set方法

四、编写映射配置文件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 namespace="com.review.mapper.UserMapper">
    <sql id="selectUser">select * from user</sql>

    <select id="findAll" resultType="user">
        select * from user
    </select>

    <select id="findById" resultType="user" parameterType="int">
        select * from user where id=#{id}
    </select>

    <insert id="addUser" parameterType="com.review.pojo.User" useGeneratedKeys="true" keyProperty="id">
        insert into user(username, password) values(#{username}, #{password})
    </insert>

    <update id="updateUser" parameterType="com.review.pojo.User" >
        update user set username=#{username}, password=#{password} where id=#{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from user where id = #{id}
    </delete>

    <select id="findByCondition" parameterType="user" resultType="user">
        <include refid="selectUser"></include>
        <where>
            <if test="id != null">
                and id=#{id}
            </if>
            <if test="username != null">
                and username=#{username}
            </if>
        </where>
    </select>

    <select id="findByIds" parameterType="list" resultType="user">
        <include refid="selectUser"></include>
        <where>
            <foreach collection="array" open="id in(" close=")" item="id" separator=",">
                #{id}
            </foreach>
        </where>
    </select>
</mapper>

说明:
xml约束头:mapper
namespace:命名空间
resultType:返回结果类型
parameterType:参数类型
sql:公共sql抽取
include:引用抽取公共部分

易错点:
1)insert into user(username, password) 此处对应的字段名称,不应加 ‘’
2)sql语句中使用 #{} 引用参数,例如:#{id}

五、编写核心配置文件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>
    <!--加载外部的properties配置文件-->
    <properties resource="jdbc.properties"></properties>
    <!--打印日志-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
    <typeAliases>
        <!--单个实体的别名-->
        <!--<typeAlias type="com.lagou.pojo.User" alias="user"></typeAlias>-->
        <!--整个包下的别名,默认为实体首字母小写-->
        <package name="com.review.pojo"></package>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <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>
        <!--方式一:引入单个xml文件,xml文件路径-->
        <!--<mapper  resource="com/mapper/UserMapper.xml"/>-->
        <!--方式二:使用mapper接口路径,要求:mapper接口名称与mapper映射配置文件名称一致-->
        <!--<mapper  class="com.review.mapper.UserMapper"/>-->
        <!--注册指定包下的所有mapper接口,要求mapper接口与mapper映射配置文件同包同名-->
        <package  name="com.review.mapper"/>
    </mappers>
</configuration>

jdbc.properties:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://x.x.x.x:3306/x
jdbc.username=root
jdbc.password=Root!!2020

说明:
xml约束头:configuration
environments :环境,可建立多个environment ,对应开发环境,生产环境
transactionManager:事务管理器
dataSource:数据源
typeAliases:类型别名。可以整包引入,默认为实体类的首字母小写
mappers:引入映射配置文件
properties :引入外部配置文件
setting:设置日志打印

易错点:
此处引入映射配置文件不会反显出来,一般会出现找不到资源的问题
解决方法:以下两种方案供选择
在确保引入映射配置文件路径正确的前提下
①删除编译后的target文件,重新编译
②将UserMapper.xml文件手动放入 target对应目录中

六、编写测试类

   //1.加载核心配置文件
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    //2.获取SQLSession工厂对象
    SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    //3.获取SQLSession对象
    SqlSession sqlSession = sessionFactory.openSession(true);
    
      /**
     * 调用sqlSession接口自带方法
     * @throws IOException
     */
    @Test
    public void findAll() throws IOException {
        List<User> list = sqlSession.selectList("userMapper.findAll");
        for (User user : list) {
            System.out.println(user);
        }
    }
 /**
     * 传统ddao层接口测试
     */
    @Test
    public void testTraditionDao(){
        UserDao userDao = new UserDaoImpl();
        List<User> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
    }
    /**
     * 代理接口测试
     */
    @Test
    public void testMapperDao(){
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        System.out.println(mapper.findById(1));
    }

执行结果:
在这里插入图片描述
七、总结
mapper代理方式是采用jdk动态代理方式实现,底层仍使用sqlSession接口API访问数据库

本次开发顺序:sqlSession自带接口 --> 传统dao层开发 --> mapper代理方式开发

mapper代理方式开发注意事项:
1)mapper.xml的namespace必须与mapper接口的全限定类名一致
2)mapper接口方法名和mapper.xml中定义的每个statement的id一致
3)mapper接口方法的参数类型和mapper.xml中parameterType一致
4)mapper接口方法的返回类型和mapper.xml中resultType一致

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值