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

被折叠的 条评论
为什么被折叠?



