MyBatis笔记

本文深入解析MyBatis框架的组成部分与工作原理,包括ORM模型、SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、SqlMapper等核心组件。同时,通过实例展示如何使用Java注解和XML配置进行数据库操作,涵盖参数传递、SQL执行、结果映射等功能。

MyBatis读书笔记一:

一、ORM模型-对象关系模型 ,数据库表和简单的java对象的映射关系模型

二、Mybatis基本构成
SqlSessionFactoryBuilder:根据配置信息或者代码生成sqlSessionFactory
SqlSessionFactory:依靠工厂来生成sqlSession
SqlSession:发送sql去执行并返回结果,也可以获取Mapper的接口
Sql Mapper: 有Java接口和xml文件

sqlSession接口的实现类有两个,DefaultSqlSession和sqlSessionManager
sqlSession用途有两种,
1、获取映射器,让映射器通过命名空间和方法名称找到对应的sql,发送给数据库后返回结果
由java接口和xml文件共同组成
定义参数类型、描述缓存、描述sql语句、定义查询结果和POJO映射关系
xml实现和configuration实现
Java注解受限,功能较少,可读性差
2、直接通过命名信息去执行sql返回结果,

sqlSessionFactoryBuilder生命周期就构建sqlSessionFactory,创建完就结束了
sqlSessionFactory创建sqlSession,应用程序访问数据库,就通过sqlSession创建sqlsession,可以创建多个连接
但是会消耗资源,所以设置成单例模式
sqlSession他的生命周期应该是请求数据库事务过程中,是一个线程不安全的对象,

注解实现:
public interface AdminMapper {

    /**************注解**************/
    @Insert("INSERT INTO userinfo(username, password) VALUES(#{username},#{password})")
    public int insertAdmin(Admin admin);

    @Select("SELECT * FROM userinfo WHERE username = #{username} AND password = #{password}")
    @Results(value = {
            @Result(id = true, column = "id", property = "id"),
            @Result(column = "username", property = "username"),
            @Result(column = "password", property = "password") })
    public Admin selectAdmin(@Param("username") String username,
                             @Param("password") String password);

    /***************xml**************/
    /**
     * 条件不定式查询
     * 我们这里使用@Param指定参数,这样的话,在AdminMapper.xml中就不用再使用parameterType属性了;否则得写parameterType属性
     */
    public List<Admin> getAdminByConditions(@Param("username")String username,
                                            @Param("password")String password,
                                            @Param("start")int start,
                                            @Param("limit")int limit);


    public int insertAdminWithBackId(Admin admin);
}

mapper实现:

<?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.xxx.mapper.userManagement.AdminMapper">

    <resultMap type="Admin" id="adminResultMap">
        <id property="id"  column="id" jdbcType="INTEGER" />
        <result property="username" column="username" jdbcType="VARCHAR" />
        <result property="password" column="password" jdbcType="VARCHAR" />
    </resultMap>

    <select id="getAdminByConditions" resultMap="adminResultMap">
        <![CDATA[ SELECT * FROM userinfo WHERE 1=1 ]]>
        <if test="username != null"><![CDATA[ AND username = #{username} ]]></if>
        <if test="password != null"><![CDATA[ AND password = #{password} ]]></if>
        <![CDATA[ ORDER BY id ASC LIMIT #{start}, #{limit} ]]>
    </select>

 
    <insert id="insertAdminWithBackId" parameterType="Admin" useGeneratedKeys="true" keyProperty="id">
       <![CDATA[
       INSERT INTO userinfo
       (
           username,
           password
       )
       VALUES
       (
           #{username, jdbcType=VARCHAR},
           #{password, jdbcType=VARCHAR}
       )
       ]]>
   </insert>

</mapper>

配置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>
        <property name="dialect" value="mysql" />
    </properties>

    <typeAliases>
        <!-- 这样会将com.xxx.model包及其子包下的所有类起别名为相应的简单类名 -->
        <package name="com.xxx.model"/>
        <!-- 如果这样去起别名的话,每一个模型类都要写一个,就比较麻烦 -->
        <!-- <typeAlias alias="Admin" type="com.xxx.model.userManagement.Admin"/> -->
    </typeAliases>
</configuration>

spring xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    <!-- 注解扫描 -->
    <context:component-scan base-package="com.xxx" />

    <!-- 引入数据源,这里变量的读取都是从ssmm0的pom.xml中读取的 -->
    <bean id="xxxDataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <!-- 引入mybatis -->
    <bean id="xxxSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="xxxDataSource" />
        <!-- 以下两个属性是专门为xml方式配置的,若只使用注解方式,这两个属性行可以不配置 -->
        <property name="configLocation" value="classpath:mybatis.xml"/>
        <property name="mapperLocations">
            <list>
                <value>classpath*:mapper/admin/*Mapper.xml</value>
            </list>
        </property>
    </bean>
    <bean id="xxxMapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--
            这里就是包名为什么就做com.xxx.mapper.user而非com.xxx.user.mapper,
            这样的话,比如说有两个项目com.xxx.mapper.user和com.xxx.mapper.hotel,value只需写作com.xxx.mapper即可
            否则,value就要写作com.xxx.user.mapper,com.xxx.hotel.mapper
         -->
        <property name="basePackage" value="com.xxx.mapper" />
        <property name="sqlSessionFactoryBeanName" value="xxxSqlSessionFactory" />
    </bean>

</beans>

 


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值