MyBatis核心原理

文章介绍了Mybatis的基本使用,包括引入依赖、配置文件设置、Mapper接口和XML映射文件的编写。详细阐述了如何创建一个简单的查询示例,以及XML映射文件中的增删改查操作,如自增主键、参数处理、返回List和Map等。
摘要由CSDN通过智能技术生成

Mybatis核心原理

一、Mybatis的Helloworld

利用mybatis做一个小demo

1.1 引入所需依赖

在这里插入图片描述

1.2 引入配置文件

把配置文件放在类路径下。
在这里插入图片描述

  • jdbc.properties
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&characterEncoding=utf-8
driverClassName=com.mysql.jdbc.Driver
username=root
password=root
  • log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
 <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
   <param name="Encoding" value="UTF-8" />
   <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
   </layout>
 </appender>
 <logger name="java.sql">
   <level value="debug" />
 </logger>
 <logger name="org.apache.ibatis">
   <level value="info" />
 </logger>
 <root>
   <level value="debug" />
   <appender-ref ref="STDOUT" />
 </root>
</log4j:configuration>
  • mybatis-config.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 resource="jdbc.properties"/>
    <!-- 开启驼峰命名 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <!-- 批量给类起别名,默认为类名,不区分大小写   -->
    <typeAliases>
        <package name="com.jixian.mybatis.pojo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!-- 配置数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driverClassName}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 批量注册Mapper文件,mapper接口和xml文件要同包同名   -->
    <mappers>
        <package name="com.jixian.mybatis.mapper"/>
    </mappers>
</configuration>

1.3 编写Mapper接口

public interface EmployeeMapper {
    Employee getEmp(Integer id);
}

1.4 编写Mapper.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是绑定Mapper接口全路径-->
<mapper namespace="com.jixian.mybatis.mapper.EmployeeMapper">
    <!-- id为要绑定Mapper接口的方法名   -->
    <select id="getEmp" resultType="Employee">
        select * from tb_employee where id = #{id}
    </select>
</mapper>

1.5 编写测试代码

        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee = mapper.getEmp(1);
        System.out.println(employee);
        sqlSession.close();

在这里插入图片描述

二、xml映射文件

mybatis增删改允许返回Integer,Long,Boolean和Void。

2.1 获取自增主键的值

	<!-- keyProperty指定要封装属性名,useGeneratedKeys开启使用自增主键策略   -->
    <insert id="addEmp" keyProperty="id" useGeneratedKeys="true">
        insert into tb_employee(last_name,email,gender)values (#{lastName},#{email},#{gender})
    </insert>

2.2 参数处理

  • 单个参数mybatis不会做任何处理,直接返回。
  • 多个参数会被封装成 一个map。
    • @Param在封装map时指定参数的key。
    • #{}就是通过key获取map的值。
    • key默认为param1, param2或0,1。
    • 如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入POJO。
    • 如果多个参数不是业务模型中的数据,没有对应的POJO,不经常使用,为了方便,我们也可以传入map。
    • 如果多个参数不是业务模型中的数据,但是经常要使用,推荐来编写一个TO(Transfer Object)数据传输对象。

2.3 select返回List

	<!--resultType:如果返回的是一个集合,要写集合中元素的类型  -->
    <select id="listEmps" resultType="employee">
        select * from tb_employee
    </select>

2.4 select返回map

返回单条数据

		Map<String,Object> getEmpReturnMap(Integer id);
	<select id="getEmpReturnMap" resultType="map">
        select * from tb_employee where id = #{id}
    </select>

返回多条数据

	@MapKey("id")
    Map<Integer,Employee> getEmpsMaps();
	<select id="getEmpsMaps" resultType="employee">
        select * from tb_employee
    </select>

2.5 自定义结果封装映射

	<resultMap id="emp" type="employee">
        <id column="id" property="id"/>
        <result column="last_name" property="lastName"/>
        <result column="email" property="email"/>
        <result column="gender" property="gender"/>
    </resultMap>
	<select id="getEmpsMaps" resultMap="emp">
        select * from tb_employee
    </select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值