MyBatis的使用

摘要:
--属性配置用于加载外部属性配置文件--˃˂!

1.使用maven引入依赖:

<dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.4</version>
    </dependency>

2.在resources目录下编写主配置文件(mybasit.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配置,用于加载外部的properties配置文件
    -->
    <properties resource="db.properties"></properties>



    <!--
    environments 主要用于进行数据源的配置
    可以配置多个数据源~ 通过default属性来指定当前项目运行过程中使用的是哪个数据源
    -->
    <environments default="development">
        <!--
        environment 用于配置一个具体的独立的数据源
        id属性用于给当前数据源定义一个名称,方便我们的项目指定
        -->
        <environment id="development">
            <!--
            transactionManager用于配置事务管理,默认情况下使用的是JDBC事务管理
            -->
            <transactionManager type="JDBC"/>
            <!--
            dataSource具体数据源的链接信息;type属性用于指定是否使用连接池
            -->
            <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="product">
            <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="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- mappers主要用于配置我们外部的映射配置文件
        在主配置文件中需要引入加载映射配置文件
     -->
    <mappers>
        <!-- mapper主要配置引入某一个具体的映射文件,resource进行路径方式的引入 -->
        <mapper resource="mapper/usersMapper.xml"/>
    </mappers>
</configuration>

2.1.编写工具类:

package com.damu.utils;

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 java.io.IOException;
import java.io.InputStream;

/**
 * Created by mouwe on 2017/5/23.
 */
public class SqlSessionFactoryUtils {

    private static String RESOURCE = "mybatis-config.xml";

    private static SqlSessionFactory sqlSessionFactory;

    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();

    /**
     * 创建一个初始化SqlSessionFactory的方法
     */
    public static void initSqlSessionFactry() {
        try {
            InputStream is = Resources.getResourceAsStream(RESOURCE);

            sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取工厂对象的方法
     * @return
     */
    public static SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }

    /**
     * 关闭SqlSession的方法
     */
    public static void close(){
        SqlSession session = threadLocal.get();
        if(session != null) {
            session.close();
            threadLocal.set(null);
        }
    }
}

3.配置db.properties:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username=root
password=root

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">
<!--
mapper 用于定义一个映射配置文件的根节点
namespace属性是用来配置命名空间,主要进行session级别的缓存管理
命名空间默认情况下,使用我们当前操作的实体类的全路径
-->
<mapper namespace="com.damu.entity.Users">

    <!--<select   resultType="com.damu.entity.Users">-->
    <select id="findUsers" resultMap="forUsers">
        select * from users

        <if test="id != null">
            where id = #{id}
        </if>
    </select>

    <!-- 自定义映射关系集合:主要包含对于一些自定义操作的配置,如不一致的属性和字段 -->
    <resultMap id="forUsers" type="com.damu.entity.Users">
        <!-- 绑定id主键 -->
        <id property="id" column="id"></id>
        <!-- result配置,主要配置普通属性,column表示配置的是数据库字段名称 property配置的是实体类的属性名称 -->
        <result column="username" property="name"></result>

        <collection property="addresses" column="id" ofType="com.damu.entity.Address" select="getAddress"></collection>
    </resultMap>

    <select id="getAddress" resultType="com.damu.entity.Address">
        select * from address where userid = #{id}
    </select>



    <sql id="user_fields">
        username, userpass, nickname, age, gender, email, phone, createTime, updateTime, lastLogin, userstatus, remark
    </sql>

    <insert id="addUser" useGeneratedKeys="true" keyProperty="id">
        insert into users( <include refid="user_fields"></include>)
        values(#{name},#{userpass}, #{nickname}, #{age}, #{gender}, #{email}, #{phone}, #{createTime}, #{updateTime}, #{lastLogin}, #{userStatus}, #{remark})
    </insert>

    <update id="updateUser">
        update users
        <set>
            <if test="name != null">username = #{name},</if>
            <if test="userpass != null">userpass = #{userpass},</if>
            <if test="nickname != null">nickname = #{nickname},</if>
            <if test="age != null">age = #{age},</if>
            <if test="gender != null">gender = #{gender},</if>
            <if test="email != null">email = #{email},</if>
            <if test="phone != null">phone = #{phone},</if>
            <if test="createTime != null">createTime = #{createTime},</if>
            <if test="updateTime != null">updateTime = #{updateTime},</if>
            <if test="lastLogin != null">lastlogin = #{lastLogin},</if>
            <if test="userStatus != null">userStatus = #{userStatus},</if>
            <if test="remark != null">remark = #{remark},</if>
        </set>
          where id = #{id}
    </update>

    <delete id="delUser">
        delete from users where id = #{id}
    </delete>
</mapper>

5.通过Dao类与数据库建立会话(增删改的操作记得使用commit()提交数据,不然不能生效)

package com.damu.dao;

import com.damu.entity.Users;
import com.damu.utils.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

/**
 * Created by mouwe on 2017/5/23.
 */
public class UsersDAO {
    private SqlSession sqlSession;
    private List<Users> list;
    private Users user;

    private SqlSession getSession() {
        sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
        return sqlSession;
    }

    /**
     * 查询全部用户
     * @return
     */
    public List<Users> findAll() {
        try {
            list = getSession().selectList("findUsers");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
        return list;
    }

    /**
     * 查询单个用户根据编号
     * @return
     */
    public Users findById(Integer id) {
        try {
            user = getSession().selectOne("findUsers", new Users(id));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
        return user;
    }

    /**
     * 增加一个新用户数据到数据库的方法
     * @return
     */
    public Users addUser(Users user) {
        try {

            // 返回值:是insert执行过程中影响的行数
            getSession().insert("addUser", user);

            sqlSession.commit();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
        return user;
    }


    /**
     * 用于修改用户资料的方法
     * @return
     */
    public Users updateUsers(Users user) {
        try {

            // 返回值:是insert执行过程中影响的行数
            getSession().update("updateUser", user);

            sqlSession.commit();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
        return user;
    }

    /**
     * 用于修改用户资料的方法
     * @return
     */
    public void delUsers(Integer id) {
        try {

            // 返回值:是insert执行过程中影响的行数
            getSession().delete("delUser", id);

            sqlSession.commit();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
    }

}
<!---使用的数据库连接池 ---->

免责声明:文章转载自《MyBatis的使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python 编码简单说记录一次批量处理文档的过程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jieba gensim 相似度实现

博客引自:https://www.cnblogs.com//DragonFire/p/9220523.html 简单的问答已经实现了,那么问题也跟着出现了,我不能确定问题一定是"你叫什么名字",也有可能是"你是谁","你叫啥"之类的,这就引出了人工智能中的另一项技术: 自然语言处理(NLP) : 大概意思就是 让计算机明白一句话要表达的意思,NLP就相当...

kaldi 三个脚本cmd.sh path.sh run.sh

参考 kaldi的全部资料_v0.4 cmd.sh 脚本为: 可以很清楚的看到有 3 个分类分别对应 a,b,c。a 和 b 都是集群上去运行这个样子, c 就是我们需要的。我们在虚拟机上运行的。你需要修改这个脚本 # "queue.pl"uses qsub. The options to it are # options to qsub. If yo...

SQLSERVER 建立全文检索

--创建测试表 --DROPTABLEFullTextIndexing CREATETABLEFullTextIndexing ( IDINTIDENTITY(1,1)NOTNULL, SentenceVARCHAR(MAX) ) --创建聚集索引 ALTERTABLEFullTextIndexingADDCONSTRAINTPK_Full...

ASP.NET 部署IIS后如何访问共享目录文件

1、我的电脑——》管理——》系统工具——》本地用户和组——》用户——》右键新建用户——》创建一个与远程文件夹相同的账号密码! 如下图: 以上为部署接口服务器中的用户配置 2、在IIS中创建一个独立的应用程序池,流程为:在应用程序池中右键——》添加应用程序池——》创建适用应用程序池名称(我这里是Test)——》点击高级设置——》找到标识——》修改为自...

kafka 消息队列

kafka是使用Java和Scala编写的一个快速可扩展的高吞吐量的分布式消息队列系统。 kafka将数据持久化存储到磁盘上,自带分区和副本机制,因而具有较好的持久化保证。 但是kafka的消息消费没有确认机制,可能因为consumer崩溃导致消息没有完成处理。因此不建议将kafka用于一致性较高的业务场景,kafka经常被用做日志收集和数据仓库之间的缓存...

Spring 远程调用工具类RestTemplateUtils

Spring 远程调用Rest服务工具类,包含Get、Post、Put、Delete四种调用方式。 依赖jar <dependency> <groupId>org.springframework</groupId> <artifactId>s...