Mybatis-01(基础)

Mybatis是基于Java的持久层框架(支持普通SQL查询,存储过程和高级映射的优秀持久层框架)
作用:
简化jdbc操作,不用专注于怎么写这个操作,而是专注于业务和SQL

MyBatis可以使用简单的XML注解用于配置和原始映射,将接口和Java 的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

ORM:对象关系映射
简单概括:更加简化jdbc代码,简化持久层,sql语句从代码中分离,利用反射,将表中数据与java bean 属性一一映 射即ORM(Object Relational Mapping 对象关系映射)

基础使用:


使用

1、 依赖包导入
新建maven项目 ,pom文件添加依赖jar

<!-- 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>

2、log4j 日志添加
在src/main/resources 资源包下添加log4j日志输出properties文件,便于查看日志输出信息
log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
#Consoleoutput...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

3、resources目录下配置文件添加
新建mybatis.xml文件,并加入配置信息如下(数据库名mybatis,表 user)
db.properties

#键值对,前后不要有空格 
#5.x版本,6.x版本之后为 com.mysql.cj.jdbc.Driver
driver=com.mysql.jdbc.Driver
#5.x版本,6.x版本之后为 jdbc:mysql://localhost:3306/ebuy?serverTimezone=GMT%2B8&characterEncoding=utf8&useUnicode=true&useSSL=false
url=jdbc:mysql://localhost:3306/class?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username=root
password=123456

#键值对,前后不要有空格
#5.x版本,6.x版本之后为 com.mysql.cj.jdbc.Driver
driver1=com.mysql.jdbc.Driver
#5.x版本,6.x版本之后为 jdbc:mysql://localhost:3306/ebuy?serverTimezone=GMT%2B8&characterEncoding=utf8&useUnicode=true&useSSL=false
url1=jdbc:mysql://localhost:3306/class?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username1=root
password1=123456

mybatis.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="db.properties"/>

<!--    &lt;!&ndash;类型别名&ndash;&gt;
    <typeAliases>
        &lt;!&ndash;单独指定别名&ndash;&gt;
        &lt;!&ndash;<typeAlias type="com.nanda.po.Account" alias="account"/>&ndash;&gt;
        <package name="com.nanda.po"/>
    </typeAliases>-->

    <environments default="development">
        <environment id="development">
            <!-- 加入事务控制 -->
            <transactionManager type="jdbc" />
            <!-- 配置数据库连接信息 -->
            <dataSource type="pooled">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
        <environment id="test">
            <!-- 加入事务控制 -->
            <transactionManager type="jdbc" />
            <!-- 配置数据库连接信息 -->
            <dataSource type="pooled">
                <property name="driver" value="${driver1}" />
                <property name="url" value="${url1}" />
                <property name="username" value="${username1}" />
                <property name="password" value="${password1}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- mapper 配置文件指定 文件数量可配置多个-->
    <mappers>
        <!--引入单个-->
         <mapper resource="com/lmw/dao/ISuerDao.xml" />
        <!--包扫描引入映射文件-->
        <!--<package name="com.nanda.mapper"/>-->
    </mappers>

</configuration>

4、映射文件添加

<?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.命名空间配置 全局唯一 包名+文件名
    2.配置Mapped Statement
    3. statement配置
        id 值声明statement编号 同一命名空间(同一文件)下不可重复
        parameterType 输入参数即占位符的数据类型 类型可以是 基本数据类型,字符串,java bean ,map,list等
        resultType 输出结果 类型可以是基本数据类型,字符串,java bean,map等
        statement 描述 即待执行的sql
        #{id} 占位符 变量名为id/value 均可 ${value} 变量名必须为value 字符串拼接形式 无法避免sql 注入
-->
<mapper namespace="com.lmw.dao.ISuerDao">
    <!-- 查询客户-->
    <select id="findAll"  resultType="com.lmw.domain.Suser">
        SELECT * FROM suser
    </select>
</mapper>

5.实体类Customer添加
需要实现序列化接口

6.在父类工程pom获取资源

7、测试

    public static void main(String[] args) throws IOException {

        /**
         a)、读取mybatis的配置文件
         b)、加载配置文件创建SqlSessionFactory
         c)、根据SqlSessionFactory创建SqlSession
         d)、通过sqlSession操作数据库
         e)、处理结果
         f)、关闭session
         */
        InputStream is = Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        // 指定数据源
        //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is,"test");
        SqlSession session = sessionFactory.openSession();

        /*不使用映射文件包扫描*/
        //List<Suser> account = session.selectOne("com.nanda.mapper.AccountMapper.queryAccountById", 1);
        ISuerDao userDao = session.getMapper(ISuerDao.class);
        List<Suser> users = userDao.findAll();
        for (Suser user : users) {
            System.out.println(user);
        }

        List<Suser> accounts = session.selectList("com.lmw.dao.ISuerDao.findAll");
        for (Suser user : accounts) {
            System.out.println(user);
        }
        session.close();
        is.close();
    }
实现的设计模式
自定义Mybatis分析.png
properties:resource
properties:url
typeAliaser和package

<result column="数据库字段名" property="实体类属性" jdbcType="数据库字段类型" />

resultMap 标签  手动指定数据库字段和java字段的映射关系
    可以通过数据库 sql as  指定别名
    <resultMap id="card_map" type="card">
        <id column="id" property="id"></id>
        <result column="user_id" property="userId"></result>
        <result column="card_num" property="cardNum"></result>
    </resultMap>
    <select id="queryCardById" parameterType="int" resultMap="card_map">
        select id,user_id,card_num from card where id = #{id};
    </select>

#{} 安全的 ? '值'
${}不安全的 ? 值 不能防止sql注入

模糊查询注意:
    uname like '%${uname}%'
    aname like CONCAT('%',#{aname},'%')
      sql公共抽取
<sql id="defaultSuser">
        SELECT * FROM suser
    </sql>

    <!-- 查询客户-->
    <select id="findAll"  resultType="com.lmw.domain.Suser">
        <include refid="defaultSuser"></include>
    </select>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。