mybatis(中)

mybatis(中)

知识点回顾:

1、核心配置文件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="存放值的属性文件的地址"></properties>
    -->
    <properties resource="config.properties"></properties>

    <!--全局配置 配置日志实现 使用log4j;添加log4j日志组件 导入jar包-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

    <!--为类定义别名
    <typeAlias type="全类名地址" alias="全类名的别名"></typeAlias>
    -->
    <typeAliases>
        <typeAlias type="com.ffyc.mybatis.model.Admin" alias="Admin"></typeAlias>
    </typeAliases>
    <!--配置数据库连接的相关信息-->
    <environments default="development">
        <environment id="development">
            <!--配置事务管理类型,使用jdbc事务管理
            事务:一次对数据库操作的若干个流程的管理  例如(转账  A->B   A-100  B+100 这就是两个变化)
            -->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据源
                type="UNPOOLED" 不使用数据库连接池
                type="POOLED"  使用数据库连接池
            -->
            <dataSource type="POOLED">
                <!--数据库驱动-->
                <property name="driver" value="${Diver}" />
                <!--数据库地址-->
                <property name="url" value="${urlValue}"/>
                <!--数据库用户名密码-->
                <property name="username" value="${userName}" />
                <property name="password" value="${passWord}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/AdminMapper.xml"/>
    </mappers>
</configuration>

2、配置属性文件config.properties

//文件中写新键对应的值
Diver = com.mysql.cj.jdbc.Driver
urlValue = jdbc:mysql://127.0.0.1:3306/mybatis_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
userName = root
passWord = root

3、为类名定义别名

 <!--为类定义别名
    <typeAlias type="全类名地址" alias="全类名的别名"></typeAlias>
    -->
    <typeAliases>
        <typeAlias type="com.ffyc.mybatis.model.Admin" alias="Admin"></typeAlias>
    </typeAliases>

4、设置 连接数据库配置 事务,数据库连接池

<!--配置数据库连接的相关信息-->
    <environments default="development">
        <environment id="development">
            <!--配置事务管理类型,使用jdbc事务管理
            事务:一次对数据库操作的若干个流程的管理  例如(转账  A->B   A-100  B+100 这就是两个变化)
            -->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据源
                type="UNPOOLED" 不使用数据库连接池
                type="POOLED"  使用数据库连接池
            -->
            <dataSource type="POOLED">
                <!--数据库驱动-->
                <property name="driver" value="${Diver}" />
                <!--数据库地址-->
                <property name="url" value="${urlValue}"/>
                <!--数据库用户名密码-->
                <property name="username" value="${userName}" />
                <property name="password" value="${passWord}"/>
            </dataSource>
        </environment>
    </environments>

5、SQL映射文件

<!--添加SQL映射文件-->
    <mappers>
        <mapper resource="mapper/AdminMapper.xml"/>
        <mapper resource="mapper/EmployeeMapper.xml"/>
        <mapper resource="mapper/DeptMapper.xml"/>
    </mappers>

6、接口与XML之间的关系

xml 命名空间(namespace)= “接口类路径”
接口方法名 与 标签id 相等
接口方法参数 与 标签 参数类型相等
接口方法返回值 与 标签返回值类型相等

	Sqlsession 获得接口的代理对象
    接口的代理对象.接口方法
 
    mybatis执行流程
	 读取核心配置文件,创建SqlSessionFactory 只读取,创建一次
	 创建SqlSession  与数据库会话对象
	 执行方法
	 提交事务
	 关闭会话
日志输出 mybatis自己根据配置选择
Junit测试 单元测试
今天的学习内容是:建立在单张表的基础上
一、基本的增删改查
二、向SQL中传参数
三、SQL的返回结果
1、基本的增删改查

新建一个项目

[外链图片转存中...(img-gourZnhi-1636166314804)]
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击完成一个mybatis项目就创建完成了。。。

删除不需要的依赖

在这里插入图片描述
在这里插入图片描述
创建 MyBatis 全局配置文件
MyBatis 的配置文件包含了对 MyBatis 行为的设置信息。 配置文档的顶层
结构如下(标签需要按照特定顺序排放):
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)

mybatis-config文件配置

<?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="存放值的属性文件的地址"></properties>
    -->
    <properties resource="config.properties"></properties>

    <!--全局配置 配置日志实现 使用log4j;添加log4j日志组件 导入jar包-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
        <!--
        数据库下划线 对应  java命名驼峰
        是否开启驼峰命名自动映射,即从经典数据库列名A_COLUMN 映射到经典 java属性名 aColumn
        -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--lazyLoadTriggerMethods 指定哪些方法触发延迟加载-->
        <setting name="lazyLoadTriggerMethods" value=""/>
        <!--name="cacheEnabled" value="true" 开启全局二级缓存配置-->
        <setting name="cacheEnabled" value="true"/>
    </settings>

    <!--为类定义别名
    <typeAlias type="全类名地址" alias="全类名的别名"></typeAlias>
    还有更牛逼的方式package是用一条语句对model整个包下的所有类定义别名
    -->
    <typeAliases>
        <typeAlias type="com.ffyc.mybatis.model.Admin" alias="Admin"></typeAlias>
        <typeAlias type="com.ffyc.mybatis.model.Employee" alias="Employee"></typeAlias>
        <typeAlias type="com.ffyc.mybatis.model.Dept" alias="Dept"></typeAlias>
    </typeAliases>
    <!--配置数据库连接的相关信息-->
    <environments default="development">
        <environment id="development">
            <!--配置事务管理类型,使用jdbc事务管理
            事务:一次对数据库操作的若干个流程的管理  例如(转账  A->B   A-100  B+100 这就是两个变化)
            -->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据源
                type="UNPOOLED" 不使用数据库连接池
                type="POOLED"  使用数据库连接池
            -->
            <dataSource type="POOLED">
                <!--数据库驱动-->
                <property name="driver" value="${Diver}" />
                <!--数据库地址-->
                <property name="url" value="${urlValue}"/>
                <!--数据库用户名密码-->
                <property name="username" value="${userName}" />
                <property name="password" value="${passWord}"/>
            </dataSource>
        </environment>
    </environments>
    <!--添加SQL映射文件-->
    <mappers>
        <mapper resource="mapper/AdminMapper.xml"/>
        <mapper resource="mapper/EmployeeMapper.xml"/>
        <mapper resource="mapper/DeptMapper.xml"/>
    </mappers>
</configuration>

配置属性文件config.properties,添加日志文件

//文件中写新键对应的值
Diver = com.mysql.cj.jdbc.Driver
urlValue = jdbc:mysql://127.0.0.1:3306/mybatis_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
userName = root
passWord = root

在这里插入图片描述

创建数据库

在这里插入图片描述

在这里插入图片描述

在java下创建mapper包用来存放接口

Mybatis-Dao 层 Mapper 接口
Mapper 接口开发方法只需要程序员编写 Mapper 接口(相当于 Dao 接口),
由 Mybatis 框架根据接口定义创建接口的动态代理对象.
使用 session.getMapper(接口.class);获得代理对象
Mapper 接口开发需要遵循以下规范:
1、 Mapper.xml 文件中的 namespace 与 mapper 接口的类路径相同。
2、 Mapper 接口方法名和 Mapper.xml 中定义的每个 statement 的 id 相同
3、 Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的
parameterType 的类型相同
4、 Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的
resultType 的类型相同
在这里插入图片描述
测试 MyBatis
读取配置文件
Reader reader =Resources.getResourceAsReader(“mybatis-config.xml”);
创建 SqlSessionFactory
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
创建 SqlSession
SqlSession sqlSession = sessionFactory.openSession();
SqlSessionFactory 接口
一旦创建,SqlSessionFactory 就会在整个应用过程中始终存在。所以没有理由
去销毁和再创建它,一个应用运行中也不建议多次创建 SqlSessionFactory。如
果真的那样做,会显得很耗时。
SqlSession 接口
Sqlsession 意味着创建数据库会话,该接口中封装了对数据库操作的方法,与
数 据 库 会 话 完 成 后 关 闭 会 话 。 mybatis 中 使 用 SqlsessionFactory 的
openSession 方法创建。
Sqlsession 中的方法:
getMapper(Class class);获得接口代理对象
commit();提交事物
查询语句不需要提交事务
close();关闭

2、向SQL中传参数

#{} 占位符,是经过预编译的,编译好 SQL 语句再取值,#方式能够防止 sql 注入
#{}:select * from t_user where uid=#{uid}
$ {} 拼接符,会传入参数字符串,取值以后再去编译 SQL 语句,$方式无法防止 Sql
注入 $ {}
$ {}:select * from t_user where uid= ‘1’
注意:MyBatis 排序时使用 order by 动态参数时需要注意,用 $ 而不是#
在这里插入图片描述
语句:

修改
< update id="唯一标识" parameterType=“参数类型">
update ts_user set userName = #{userName},userAge = #{userAge}
where userId = #{userId}
< /update>
删除
< delete id="唯一标识" parameterType="参数类型">
delete from ts_user where userId = #{id}
< /delete>
查询
< select id="唯一标识" resultType="返回结果集类型">
select * from ts_user where id= #{id}
< /select>
3、SQL的返回结果

简单类型输出映射

返回简单基本类型
	public int findUserInfoCount();
	< select id="findUserInfoCount" resultType="int">
		select count(*) from userInfo
	< /select>
	POJO 对象输出映射
		如果表中的类名与类中的属性名完全相同,mybatis会自动将查询结果封装到POJO对象中. 如果java中使用标准驼峰命名,数据库中使用下划线连接命名,可以开始全局设置实现自动转换
	<setting name="mapUnderscoreToCamelCase" value="true"/>
	public User findUserInfoById(int id)
	<select id="findUserInfoById" parameterType="int" resultType="User">
		select * from t_user where id=#{id}
	</select>

定义resultMap

(1). resutlMap 的 id 属性是 resutlMap 的唯一标识,本例中定义为“useresultMap”
(2). resutlMap 的 id 属性是映射的 POJO 类
(3). id 标签映射主键,result 标签映射非主键
(4). property 设置 POJO 的属性名称,column 映射查询结果的列名称

使用 resutlMap

<?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.ffyc.mybatis.mapper.AdminMapper">
    <!--
    parameterType="参数类型"
  传值:  #{属性名}  values (?,?,?) 赋值方式是预编译的,它是安全的 可以放置SQL注入
  传列名:  ${属性名}  values ('admin1','222','男')  字符串拼接方式
          insert into admin(account,password,sex)values ('${account}','${password}','${sex}')
    ${} 多用来传列名,而不是传数据
    order by 排序(数据库语法I)
            useGeneratedKeys="true" 可以返回刚插入的数据主键
            keyColumn="id"  告知主键列
            keyProperty="id" 告知与主键列对应的属性

    -->
    <insert id="saveData" parameterType="Admin" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
        /*insert into admin(account,password,sex)values ('${account}','${password}','${sex}')*/

        insert into admin(account,password,sex)values (#{account},#{password},#{sex})
   </insert>
    <update id="updateAdmin" parameterType="Admin">
        update admin set account=#{account},
                         password=#{password},
                         sex=#{sex}
                         where id = #{id}
    </update>
    <delete id="deleteAdmin">
        delete  from admin where id=#{id}
    </delete>
    <!--
    特殊情况下,列名与属性名不一致Admin{id=2, account='admin', password='111', sex='null'} ,就要用到自定义映射resultMap
    数据库列名我改为sex1
    resultMap:结果集映射
    -->
    <resultMap id="adminMap" type="Admin">
        <!--主键-->
        <id column="id" property="id"></id>
        <!--其他列-->
        <result column="account" property="account"></result>
        <result column="password" property="password"></result>
        <result column="sex1" property="sex"></result>
    </resultMap>
    <!--
    resultType="Admin" 返回值类型 根据返回值类型 创建一个对象
    将数据库自动映射到java对象中,前提是表中的列名与类中的属性名相同
    开启驼峰命名自动映射  从数据库命名转java驼峰命名
    -->
    <select id="getAdminById" resultMap="adminMap">
        select * from admin where id = #{id}
    </select>
    <select id="getAdmin" resultType="Admin">
        select * from admin where account = #{acc} and sex=#{sex}
    </select>
    <!--java中已有的类作为类型使用时,可以直接使用mybatis定义好的别名-->
    <select id="getAdmin1" resultType="Admin" parameterType="hashmap">
        select * from admin where account = #{acc} and sex=#{sex}
    </select>
    <select id="getAdminList" resultType="Admin">
        select * from admin
    </select>
    <!--
        简单类型不用写成resultType="java.lang.Integer"
        可以直接写成resultType="int"
    -->
    <select id="getAdminCount" resultType="int">
        select count(*) from admin
    </select>
</mapper>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值