Mybatis01:Mybatis概念及环境搭建

1.Mybatis概念

1.Mybatis特点

​ 1.属于持久层框架 持久化(将内存中的对象数据转移到数据库的过程称为持久化)

​ Mybatis Hibernate Spring-Data-Jpa

​ 2.半自动化 ORM 框架

​ ORM:对象关系映射思想

​ 面向对象OOP 关系型数据库

​ 类(User) t_user

​ 成员变量 字段

​ 类对象 记录

​ 半自动化 VS 自动化

​ Mybatis-半自动化:

​ 1.表需要手动进行设计

​ 主表 从表

​ 2.应用程序提供sql -基本功(以查询为主

​ 单表查询-(条件过滤 排序 分组 子查询 聚合查询-聚合函数)

​ 多表连接查询

​ )

​ 3.依赖数据库平台

​ 优点:上手简单(基于原生的JDBC封装) 优化比较灵活 适合做互联网项目

​ Hibernate-自动化ORM 框架

​ 1.表可以通过框架自动化创建

​ 2.省掉基本的sql (基本的添加 查询 更新 删除)

​ 3.不依赖数据库平台

​ 缺陷:学习成本较高 优化难度较大 适用于传统的软件( OA | 图书馆管理系统 | ERP。。 ) 不适合大型的互联网项目(电商 金融项目)

2.什么是 MyBatis?

​ MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

​ 1.支持定制化sql (程序员编写sql)

​ 2.支持存储过程调用(数据库端脚本)

​ 3.映射处理(结果映射)

屏蔽原生的jdbc 代码( Connection PS ResultSet 资源关闭 )

XML 配置 | 注解配置

2.Mybatis环境搭建

目录图:

mybatis1.PNG

表的结构图:

Mybatis2.PNG

1.构建Maven普通工程:maven-archetype-quickstart
2.pom.xml 添加依赖坐标
<!-- mybatis jar 包依赖 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.1</version>
    </dependency>
    <!-- 数据库驱动 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.39</version>
    </dependency>
    <!-- log4j 日志打印 -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.16</version>
    </dependency>

<build>
    <!--
        Maven 项目
        如果源代码(src/main/java)存在xml  properties  tld 等文件  maven 默认不会自动编译该文件到输出目录
        如果要编译源代码中xml properties tld 等文件  需要显式配置resources 标签
     -->
    <resources>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
          <include>**/*.properties</include>
          <include>**/*.tld</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>
3.resources文件夹中添加日志文件 log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t]-%m%n
4.resources文件夹中添加配置文件 jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
jdbc.user=root
jdbc.password=root
5.数据库表
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) NOT NULL,
  `user_pwd` varchar(255) DEFAULT NULL,
  `flag` varchar(255) DEFAULT NULL,
  `create_time` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;
6.添加User对象实体类
public class User {
    private Integer id;
    private String userName;
    private String userPwd;
    private String flag;
    private Date createtime;
}
7.在 java目录下新建一个 mappers 包添加Sql映射文件 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">
<!--
1.命名空间配置 namespace: 值全局唯一 包名+文件名(不包含后缀如:.xml),格式:com.mage.mappers.UserMapper
2.配置 Mapped Statement
3.查询标签:select 又称为statement statement 配置
id 值声明 statement 唯一标识,同一命名空间(同一文件)下不可重复
parameterType 输入参数即占位符的数据类型 类型可以是 基本数据类型,字符串,javabean ,map,list,数组 等
resultType 输出结果 类型可以是基本数据类型,字符串,javabean,map等
标签体:statement 描述 即待执行的 sql语句
#{id} 占位符 变量名为 id/value 均可 ${value} 变量名必须为 value 如果是字符串拼接形式 无法避免sql注入
-->
<mapper namespace="com.mage.mappers.UserMapper">
    <select id="queryUserById" parameterType="int" resultType="com.mage.vo.User">
        select id,user_name as userName,user_pwd as userPwd from user where id=#{id}
    </select>
</mapper>
8.resources文件夹中添加全局配置文件mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!-- mybatis 框架头文件声明,类似 spring 环境,均需要加入头文件 -->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 添加数据库连接相关配置信息 -->
<configuration>
     <!--引入外部配置文件-->
    <properties resource="jdbc.properties"/>
    
    <environments default="development">
        <environment id="development">
            <!-- 加入事务控制 -->
            <transactionManager type="jdbc" />
            <!-- 配置数据库连接信息 -->
            <dataSource type="pooled">
               <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- mapper 加载指定Sql映射配置文件 文件数量可配置多个-->
    <mappers>
        <!--resource:包路径 格式:xxx/xxx/xxx/xxxMapper.xml-->
        <mapper resource="com/mage/mappers/UserMapper.xml" />
    </mappers>
</configuration>
9.添加测试代码
@Test
public void test01() throws IOException {
    /*步骤:
     * 1.加载全局配置文件 构建sqlSessionFactory
     * 2.获取会话sqlSession
     * 3.调用方法执行查询
     * 4.关闭查询
     */   

    /*加载配置到内存 注意:org.apache.ibatis.io.Resources*/
    InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
    /*
	*创建SqlSessionFactory对象hibernate也是如此,必须先获取SqlSessionFactory实例化对象
	*/
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    /*
 	*打开会话
 	*/
    SqlSession sqlSession = sqlSessionFactory.openSession();
    /**获取session以便操作数据库
	* 参数一:指定UserMapper.xml映射文件id必须加入命名空间
	* 参数二:指定输入参数
	* 参数statment对应:namespace.statementId
    */
    User user = sqlSession.selectOne("com.mage.mappers.UserMapper.queryUserById", 75);
    System.out.println(user);
    /*
	*操作完数据库关闭session
	*/
    sqlSession.close();
}
10.启动测试

3.mybatis中的Mapper.xml中sql入参,结果参数配置

  • 入参: 基本类型(包装类型)、String、Date、JavaBean、Map、List、数组
  • 结果参数:基本类型(4类8种) String Date JavaBean List Map List
1.Mybatis映射sql 入参配置
基本类型
<!--使用sql标签,将sql语句中频繁使用的字段统一管理和使用,直接通过id属性来调用--> 
<sql id="user_columns">
    id,user_name as userName,user_pwd as userPwd,flag,create_time as createTime
</sql>

<select id="queryUserById" parameterType="int" resultType="com.mage.vo.User">
    select <include refid="user_columns"/>
    from user
    where id=#{userId}
</select>
String 类型
<select id="queryUserByUserName" parameterType="string" resultType="com.mage.vo.User">
    select  <include refid="user_columns"/>  
    from user 
    where user_name=#{userName}
</select>
JavaBean 类型
<select id="queryUserByUserNameAndUserPwd" parameterType="com.mage.query.UserQuery" resultType="com.mage.vo.User">
    <!--
               userName,userPwd  为 UserQuery 类成员变量名
     -->
    select  <include refid="user_columns"/>  
    from user 
    where user_name=#{userName} and user_pwd=#{userPwd}
</select>
Map 类型
<select id="queryUserByUserNameAndUserPwdMap" parameterType="map" resultType="com.mage.vo.User">
    <!--
               uname  map 中key 的名称
               password map 中key 的名称
     -->
    select  <include refid="user_columns"/>  
    from user 
    where user_name=#{uname} and user_pwd =#{password}
</select>
数组类型
<!--
collection  值  array|list  当数组放在map 中传入时collection值此时为key的名称!!! 
-->
<update id="updateUserPasswordByIds" >
    update user set user_pwd="111111" where id in
    <foreach collection="array" item="item"  open="(" separator="," close=")">
        #{item}
    </foreach>
</update>
2.Mybatis映射sql 结果参数配置
结果参数:基本类型(4类8种)  String Date JavaBean  List  Map  List<Map>
resultType:String Date JavaBean  map
resultMap:属于一个标签id 值 为另一个resultMap 标签的id 
基本类型
<select id="countUser" resultType="int">
    select count(1) 
    from user
</select>
日期类型
<select id="queryUserCreateTimeByUserId" parameterType="int" resultType="date">
    select create_time 
    from user 
    where  id=#{userId}
</select>
JavaBean
<sql id="user_columns">
    id,user_name as userName,user_pwd as userPwd,flag,create_time as createTime
</sql> 
<select id="queryUserByUserName" parameterType="string" resultType="com.mgae.vo.User">
    select <include refid="user_columns"/>  
    from user 
    where user_name=#{userName}
</select>
Map
<select id="queryUsersByUserNameLikeMap" parameterType="string" resultType="map">
    select <include refid="user_columns"/> 
    from user 
    where user_name like concat('%',#{userName},'%')
</select>
List
<select id="queryUsersByUserNameLike" parameterType="int" resultType="com.mgae.vo.User">
    select <include refid="user_columns"/> 
    from user 
    where user_name like concat('%',#{userName},'%')
</select>    
ResultMap 接收结果
 <!--
       当前文件 id 唯一且不可重复
 -->
<resultMap id="user_map" type="User">
    <!--
           column:返回的列名
           property:User 对象成员变量
        -->
    <result column="id" property="id"></result>
    <result column="user_name" property="userName"></result>
    <result column="user_pwd" property="userPwd"></result>
    <result column="flag" property="flag"></result>
    <result column="create_time" property="createTime"></result>
</resultMap>
<select id="queryUserById02" parameterType="int" resultMap="user_map">
    select id, user_name, user_pwd, flag, create_time
    from user
    where id=#{userId}
</select>

4.Mybatis的xml配置文件中常见元素配置

(properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)
1.properties标签

1.给某些外部属性赋值且可以动态替换

<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>

2.加载外部配置文件

 <!--引入外部配置文件-->
<properties resource="jdbc.properties"/>
2.typeAlias标签

1.类型别名是为 Java 类型设置一个短的名字,它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余,书写方便

<typeAliases>
    <!--配置1:指定具体类取别名-->
    <typeAlias type="com.mage.vo.User" alias="user"/>
    <typeAlias type="com.mage.query.UserQuery" alias="userquery"/>
    <!--配置2:指定某个包路径下的所有类取别名,别名默认是类名(推荐使用)-->
    <package name="com.mage.vo"/>
    <package name="com.mage.query"/>
</typeAliases>

对应mybatis项目中的java目录下的Mapper.xml映射文件中sql入参和结果参数配置可以做出相应的书写改变

<!--使用sql标签,将sql语句中频繁使用的字段统一管理和使用,直接通过id属性来调用--> 
<sql id="user_columns">
    id,user_name as userName,user_pwd as userPwd,flag,create_time as createTime
</sql>
<!--在mybatis.xml中添加别名标签,sql映射文件中入参和结果参数可以用类名代替,不必写包名+类名-->
<select id="queryUserById" parameterType="int" resultType="User">
    select <include refid="user_columns"/>
    from user
    where id=#{userId}
</select>
<select id="queryUserByUserNameAndUserPwd" parameterType="UserQuery" resultType="User">
    <!--
               userName,userPwd  为 UserQuery 类成员变量名
     -->
    select  <include refid="user_columns"/>  
    from user 
    where user_name=#{userName} and user_pwd=#{userPwd}
</select>
3.mappers标签

mappers 映射器(四种配置):精确定位我们配置的sql映射文件的所在位置,进行后续的CRUD操作!

<!— sqlmapper 配置文件路径 -->
<mappers>
    <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
    <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
    <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!—url 绝对路径形式-->
<mappers>
    <mapper url="file:///var/mappers/AuthorMapper.xml"/>
    <mapper url="file:///var/mappers/BlogMapper.xml"/>
    <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!—接口 列表配置形式 注解 sql-->
<mappers>
    <mapper class="org.mybatis.builder.AuthorMapper"/>
    <mapper class="org.mybatis.builder.BlogMapper"/>
    <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!—映射包下所有接口-->
<mappers>
    <package name="org.mybatis.builder"/>
</mappers>
4.settings标签
<settings>
    <!--
            数据库字段(带有_字符的字段) 自动转换为驼峰命名
     -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

本次分享就到这里,如果文章有小问题,欢迎评论区留言,如果文章对你有帮助,请各位收藏并给我点个赞,如果你想学习更多,请关注我!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QZP51ZX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值