javaWeb-MyBatis框架常用知识点详解

1.如何配置MyBatis中xml文件的提示约束,如图:

这里写图片描述

2.MyBatis使用的是日志框架,来记录日志,要想查看它底层到底执行的是什么sql语句,得配置日志文件,log4j.properties,放置resources源文件目录中,

简介:
    其中有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局):
可简单理解为日志级别/日志要输出的地方/日志以何种形式输出。综合使用这三个组
件可以轻松地记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。
内容:
    //Loggers记录器:输出错误级别的,标准输出
    log4j.rootLogger=ERROR, stdout

    //打印包cn.itsource中的日志
    log4j.logger.cn.itsource=TRACE

    //日志输出的排版和布局
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

3.MyBatis的主配置文件(MyBatis-config.xml名字自拟,应放在resources文件夹中,内容从中文PDF中寻找)讲解:

<?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>
    <!-- 环境配置 -->
    <environments default="development">
        <!-- 连接数据库的基本信息配置 -->
        <environment id="development">
            <!-- 事务管理器:JDBC的管理机制 -->
            <transactionManager type="JDBC" />
            <!-- 配置连接池(数据源) -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/MyDataBase" />
                <property name="username" value="root" />
                <property name="password" value="1229341617lq" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 表的配置文件,封装了对表的CRUD操作,最前面不需要加/ -->
        <mapper resource="com/itcast/oa/domain/ProductMapper.xml" />
    </mappers>
</configuration>

4.MyBatis的对象映射文件(放置domain中)配置讲解:

<?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">

<!-- namespace命名规则:模块下+mapper/domain+表配置文件名,namespace + id唯一找到sql语句 -->
<mapper namespace="com.itcast.oa.mapper.ProductMapper">
    <!--
        id:                    唯一标识,和namespace组成全局唯一标识
        resultType:            返回类型(DML操作没有此属性),表中一行记录对应的对象类型 全限定名称
        parameterType:         参数类型
        parameterMap:           已经废除不用,常用parameterType
     -->

    <select id="list" resultType="com.itcast.oa.domain.Product">
        SELECT * FROM product
    </select>

    <select id="get" resultType="com.itcast.oa.domain.Product" parameterType="long">
        SELECT * FROM product WHERE id = #{id}
    </select>

    <insert id="save" parameterType="com.itcast.oa.domain.Product" >
        INSERT INTO product 
            (productName, supplier, salePrice, costPrice, dir_id, cutoff, brand)
        VALUES
            (#{productName}, #{supplier}, #{salePrice}, #{costPrice}, #{dir_id}, #{cutoff}, #{brand})
    </insert>

    <delete id="delete" parameterType="long">
        DELETE FROM product WHERE id = #{id}
    </delete>

    <update id="update" parameterType="com.itcast.oa.domain.Product">
        UPDATE product SET 
            productName = #{productName}, brand = #{brand}, costPrice = #{costPrice}, salePrice = #{salePrice}, cutoff = #{cutoff}, supplier=#{supplier}, dir_id = #{dir_id}
        WHERE
            id = #{id}
    </update>
</mapper>

5.MyBatis实现CRUD操作的常规步骤:

1.加载MyBatis-config.xml文件,获取SqlSessionFactory对象(线程安全的,运行期间创建一次即可):DataSource

2.使用SqlSessionFactory创建Session对象(线程不安全的,每一个线程中都应该有一份实例对象):Connection 

3.使用SqlSession完成CRUD和事务操作(DML操作需要commit提交事务)

4.释放SqlSession
package com.itcast.oa.dao.impl;

import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.itcast.oa.dao.IProductDao;
import com.itcast.oa.domain.Product;

/**
 *           MyBatis常规步骤: 
 * 1.加载MyBatis-config.xml文件,获取SqlSessionFactory对象(线程安全的,运行期间创建一次即可):DataSource
 * 2.使用SqlSessionFactory创建Session对象(线程不安全的,每一个线程中都应该有一份实例对象):Connection 
 * 3.使用SqlSession完成CRUD和事务操作(DML操作需要commit提交事务)
 * 4.释放SqlSession
 */
public class ProductDaoImpl implements IProductDao {

    @Override
    public int save(Product obj) {
        try {
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
                    .build(Resources.getResourceAsReader("MyBatis-config.xml"));
            SqlSession session = sessionFactory.openSession();

            int effectRows = session.insert("com.itcast.oa.mapper.ProductMapper.save", obj);

            session.commit();
            session.close();

            return effectRows;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public int delete(Long id) {
        try {
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
                    .build(Resources.getResourceAsReader("MyBatis-config.xml"));
            SqlSession session = sessionFactory.openSession();

            int effectRows = session.delete("com.itcast.oa.mapper.ProductMapper.delete", id);

            session.commit();
            session.close();

            return effectRows;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public int update(Product obj) {
        try {
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
                    .build(Resources.getResourceAsReader("MyBatis-config.xml"));
            SqlSession session = sessionFactory.openSession();

            int effectRows = session.update("com.itcast.oa.mapper.ProductMapper.update", obj);

            session.commit();
            session.close();

            return effectRows;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public Product get(Long id) {
        try {
            // 1.利用ibatis中的Resources类,加载来自classPath路径下的主配置文件信息,得到SessionFactory对象
            InputStream config = Resources
                    .getResourceAsStream("MyBatis-config.xml");
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
                    .build(config);
            // 2.通过sessionFactory对象打开session得到SqlSession对象
            SqlSession session = sessionFactory.openSession();
            // 3.利用sqlSession执行CRUD操作:namespace+id,找到sql语句,并在此设置参数
            Product pro = session.selectOne(
                    "com.itcast.oa.mapper.ProductMapper.get", id);
            // 4.关闭sqlSession资源
            session.close();

            return pro;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    public List<Product> getAll() {
        try {
            // 1.利用ibatis中的Resources类,加载来自classPath路径下的主配置文件信息,得到SessionFactory对象
            InputStream config = Resources
                    .getResourceAsStream("MyBatis-config.xml");
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
                    .build(config);
            // 2.通过sessionFactory对象打开session得到SqlSession对象
            SqlSession session = sessionFactory.openSession();
            // 3.利用sqlSession执行CRUD操作:namespace+id,找到sql语句
            List<Product> productList = session
                    .selectList("com.itcast.oa.mapper.ProductMapper.list");
            // 4.关闭sqlSession资源
            session.close();

            return productList;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

}

6.优化操作:

6.1:抽取MyBatis工具类MyBatisUtil.java:

package com.itcast.oa.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public enum MyBatisUtil {
    INSTANCE;

    private static SqlSessionFactory sessionFactory;

    static{
        try {
            sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("MyBatis-config.xml"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public SqlSession getSession(){
        return sessionFactory.openSession();
    }

}


CRUD操作为:


package com.itcast.oa.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.itcast.oa.dao.IProductDao;
import com.itcast.oa.domain.Product;
import com.itcast.oa.util.MyBatisUtil;

/**
 *           MyBatis常规步骤: 
 * 1.加载MyBatis-config.xml文件,获取SqlSessionFactory对象(线程安全,运行期间创建一次即可):DataSource
 * 2.使用SqlSessionFactory创建Session对象(线程不安全的,每一个线程中都应该有一份实例对象):Connection 
 * 3.使用SqlSession完成CRUD和事务操作(DML操作需要commit提交事务)
 * 4.释放SqlSession
 */
public class ProductDaoImpl implements IProductDao {

    @Override
    public int save(Product obj) {
        SqlSession session = null;
        try{
            session = MyBatisUtil.INSTANCE.getSession();
            int effectRows = session.insert("com.itcast.oa.mapper.ProductMapper.save", obj);
            session.commit();

            return effectRows;
        }finally{
            session.close();
        }
    }

    @Override
    public int delete(Long id) {
        SqlSession session = null;
        try{
            session = MyBatisUtil.INSTANCE.getSession();
            int effectRows = session.delete("com.itcast.oa.mapper.ProductMapper.delete", id);
            session.commit();

            return effectRows;
        }finally{
            session.close();
        }
    }

    @Override
    public int update(Product obj) {
        SqlSession session = null;
        try{
            session = MyBatisUtil.INSTANCE.getSession();
            int effectRows = session.update("com.itcast.oa.mapper.ProductMapper.update", obj);
            session.commit();

            return effectRows;
        }finally{
            session.close();
        }
    }

    @Override
    public Product get(Long id) {
        SqlSession session = null;
        try{
            session = MyBatisUtil.INSTANCE.getSession();
            Product pro = session.selectOne(
                    "com.itcast.oa.mapper.ProductMapper.get", id);

            return pro;
        }finally{
            session.close();
        }
    }

    @Override
    public List<Product> getAll() {
        SqlSession session = null;
        try{
            session = MyBatisUtil.INSTANCE.getSession();
            List<Product> productList = session
                    .selectList("com.itcast.oa.mapper.ProductMapper.list");

            return productList;
        }finally{
            session.close();
        }

    }


}

6.2:抽取db.properties文件(放置resources源文件夹中):

driverClassName=com.mysql.jdbc.Driver
uri=jdbc:mysql://localhost:3306/MyDataBase
username=root
password=1229341617lq

主配置文件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>
    <!-- 引入db.properties文件中的数据库配置信息 -->
    <properties resource="db.properties" />

    <!-- 环境配置 -->
    <environments default="development">
        <!-- 连接数据库的基本信息配置 -->
        <environment id="development">
            <!-- 事务管理器:JDBC的管理机制 -->
            <transactionManager type="JDBC" />
            <!-- 配置连接池(数据源) -->
            <dataSource type="POOLED">
                <property name="driver" value="${driverClassName}" />
                <property name="url" value="${uri}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 表的配置文件,封装了对表的CRUD操作,最前面不需要加/ -->
        <mapper resource="com/itcast/oa/domain/ProductMapper.xml" />
    </mappers>
</configuration>

6.3:在主配置文件中配置类型别名:

<typeAliases>
    <typeAlias type="com.itcast.oa.domain.Product" alias="Product"/>
</typeAliases>



此时对象配置文件为:
<?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">

<!-- namespace命名规则:模块下+mapper/domain+表配置文件名,namespace + id唯一找到sql语句 -->
<mapper namespace="com.itcast.oa.mapper.ProductMapper">
    <!--
        id                     :    唯一标识,和namespace组成全局唯一标识
        resultType   :      返回类型(DML操作没有此属性),表中一行记录对应的对象类型 全限定名称
        parameterType:  参数类型
     -->

    <select id="list" resultType="Product">
        SELECT * FROM product
    </select>

    <select id="get" resultType="Product" parameterType="long">
        SELECT * FROM product WHERE id = #{id}
    </select>

    <insert id="save" parameterType="Product" >
        INSERT INTO product 
            (productName, supplier, salePrice, costPrice, dir_id, cutoff, brand)
        VALUES
            (#{productName}, #{supplier}, #{salePrice}, #{costPrice}, #{dir_id}, #{cutoff}, #{brand})
    </insert>

    <delete id="delete" parameterType="long">
        DELETE FROM product WHERE id = #{id}
    </delete>

    <update id="update" parameterType="Product">
        UPDATE product SET 
            productName = #{productName}, brand = #{brand}, costPrice = #{costPrice}, salePrice = #{salePrice}, cutoff = #{cutoff}, supplier=#{supplier}, dir_id = #{dir_id}
        WHERE
            id = #{id}
    </update>
</mapper>

6.4:当对象得属性名和数据库中的列名不同时,可用resultMap配置,在对象配置文件中:

<resultMap type="Product"(类型别名)  id="ProductMapping">
    <!-- 映射主键列 -->
    <id property="id" column="id" />
    <!-- 映射非主键列,其他属性和列名相同的可省略不配 -->
    <result property="productname"  column="productName" />
</resultMap>

对象配置文件为:
<?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">

<!-- namespace命名规则:模块下+mapper/domain+表配置文件名,namespace + id唯一找到sql语句 -->
<mapper namespace="com.itcast.oa.mapper.ProductMapper">
    <!--
        id                     :    唯一标识,和namespace组成全局唯一标识
        resultType   :      返回类型(DML操作没有此属性),表中一行记录对应的对象类型 全限定名称
        parameterType:  参数类型
     -->

    <select id="list" resultType="ProductMapping">
        SELECT * FROM product
    </select>

    <select id="get" resultType="ProductMapping" parameterType="long">
        SELECT * FROM product WHERE id = #{id}
    </select>

    <insert id="save" parameterType="Product" >
        INSERT INTO product 
            (productName, supplier, salePrice, costPrice, dir_id, cutoff, brand)
        VALUES
            (#{productName}, #{supplier}, #{salePrice}, #{costPrice}, #{dir_id}, #{cutoff}, #{brand})
    </insert>

    <delete id="delete" parameterType="long">
        DELETE FROM product WHERE id = #{id}
    </delete>

    <update id="update" parameterType="Product">
        UPDATE product SET 
            productName = #{productName}, brand = #{brand}, costPrice = #{costPrice}, salePrice = #{salePrice}, cutoff = #{cutoff}, supplier=#{supplier}, dir_id = #{dir_id}
        WHERE
            id = #{id}
    </update>


    <resultMap type="Product" id="ProductMapping">
        <!-- 映射主键列 -->
        <id property="id" column="id" />
        <!-- 映射非主键列 -->
        <result property="productname" column="productName" />
    </resultMap>
</mapper>

7.MyBatis的中间数据类型,如图:
这里写图片描述

8.存储时设置属性,对象插入后自动生成id(自动获取生成主键),在对象配置文件的insert标签中添加:

useGeneratedKeys=true
keyProperty=”id”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值