Mybatis基础使用教程

#MyBatis介绍
MyBatis是一个开源的数据待久层框架。
注意本人是在idea上学习的针对idea做的基础使用教程,使用Eclipse需要对应的改变。
#Mybatis环境搭建
首先下载对应的jar包导入自己的项目中,在这里贴一个链接Mybatis的jar
然后对应做配置文件。在这里贴一个我的配置文件.对应自己的项目做对应的改变即可直接使用。
在idea中maven中resources中的文件不会默认编译,需要在配置文件中配置,详细请——百度Maven工程中不识别mybatis的Mapper.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>
    <!--    引入database.properties-->
    <properties resource="database.properties"/>
<!--    配置mybatis的log实现LOG4J-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
        <setting name="cacheEnabled" value="true"/>
    </settings>

    <!--<typeAliases>
        <typeAlias type="poje.User" alias="user"></typeAlias>
        <typeAlias type="poje.provider" alias="provider"></typeAlias>
    </typeAliases>-->
    <typeAliases>
        <package name="pojo"/>
    </typeAliases>

<!--    配置mybatis多套运行环境-->
    <environments default="development">
        <!--    开发环境-->
        <environment id="development">
<!--            配置事务管理,采用JDBC的事务管理-->
            <transactionManager type="JDBC"></transactionManager>
<!--            POOLED:mybatis自带的数据源JNDI:基于tomcat的数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
        <environment id="test">
            <transactionManager type="JDBC"></transactionManager>
            <!--            POOLED:mybatis自带的数据源JNDI:基于tomcat的数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>

    </environments>

<!--    将mapper文件加入到配置文件中-->
    <mappers>
       <!-- <mapper resource="dao/user/UserMapper.xml"/>-->
        <package name="dao"/>
    </mappers>
</configuration>

然后创建对应的类的映射文件,如下,但是右键是不能直接创建xml文件的。
详细过程百度idea如何创建mapper.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.user.UserMapper">
    <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>

    <insert id="add" parameterType="User">
        insert into smbms_user
        (userCode,userName,userPassword,userRole,gender,birthday,phone,address,creationDate,createdBy)
        values(#{userCode},#{userName},#{userPassword},#{userRole},#{gender},#{birthday},#{phone},#{address},#{creationDate},#{createdBy})
    </insert>

    <select id="getLoginUser" resultType="User" parameterType="string">
        select * from smbms_user where userCode=#{userCode}
    </select>
</mapper>

还有与之对应的mapper接口

package dao.user;

import org.apache.ibatis.annotations.Param;
import pojo.User;

import java.util.List;

public interface UserMapper {

    /**
     * 增加用户信息
     * @param user
     * @return
     */
    public int add(User user);

    /**
     * 通过userCode获取User
     * @param userCode
     * @return
     */
    public User getLoginUser(@Param("userCode") String userCode);

    /**
     * 通过条件查询-userList
     * @param userName
     * @param userRole
     * @param currentPageNo
     * @param pageSize
     * @return
     */
    public List<User> getUserList(@Param("userName") String userName,@Param("userRole") int userRole,
                                  @Param("currentPageNo") int currentPageNo,@Param("pageSize") int pageSize);

    /**
     * 通过条件查询-用户表记录数
     * @param userName
     * @param userRole
     * @return
     */
    public int getUserCount(@Param("userName") String userName,@Param("userRole") int userRole);

    /**
     * 通过userId删除user
     * @param delId
     * @return
     */
    public int deleteUserById(@Param("delId") Integer delId);


    /**
     * 通过userId获取user
     * @param id
     * @return
     */
    public User getUserById(@Param("id") String id);

    /**
     * 修改用户信息
     * @param user
     * @return
     */
    public int modify(User user);

    /**
     * 修改当前用户密码
     * @param id
     * @param pwd
     * @return
     */
    public int updatePwd(@Param("id") int id, @Param("pwd") String pwd);

}

注意@param() 是为参数中起的别名,能够直接对应在mapper.xml文件中使用。xml文件中parameterType是参数类型 一般可以不用写,如果参数是对象的话一般需要写上。resultType是返回的类型,delete,insert,update语句不需要声明,在select需要声明。

#xml映射文件中的多表格查询和条件查询
日常开发中我们大多需要多表连接并有条件。然后我们开始学习
开发中我们有基本的条件查询,常用语句如下

if语句的用法
<if test=”userCode!=null”> userCode=#{userCode},</if>

相对于java中的if else 
<choose>
	<when test=””>
	</when>
	<otherwise>
	</otherwise>
</choose>

条件查询中有一种特殊不同查询即当参数类型是list,map实现in语句时
在MyBatis中使用的是

接口中的方法
Public List<User> getUserList(List<Integer> roleList)

对应mapper.xml方法
select * from user where  id  in  
<foreach collection=”list” item=”roleList” open=”(“ separator=”,”close=”)”>
#{roleList}
</foreach>

对于foreach是通用的当参数类型不同时 只要改变 collection 即可。

参数类型对应的类型
listlist
mapkey
数组array

更多参考MyBatis帮助文档

开发中遇到多表查询可以有两种方法,一种是在对应的实体类中增加一个属性,一种是使用resultMap实现。
实体类中增加属性的就不用讲了,我们重点讲解使用resultMap

<resultMap type="User" id="userRoleResult">
	<id property="id" column="id"/>
	<result property="userCode" column="userCode"/>
	<!--对应实体类有的属性可以不用写会自动映射,后面我们讲解MyBatis自动映射;
	property是对应的实体类中的属性名字 此处是属性是一个对象  javaType是对应的实体类-->
	<association property="role" javaType="Role">
		<!--注意column是对应sql语句查询出来的结果集合的名字-->
		<id property="id" column="r_id"/>
	</association>
	
	<!--可以使用下面方法-->
	<collection property="role" ofType="Role">
		<id property="id" column="r_id"/>
	</collection>
	
	<!--当collection可以重复使用的时候考虑抽出来写一个resultMap,在collection使用属性resultMap=""  实现引用-->
	<collection property="role" ofType="Role" resultMap="roleList"/>
	
</resultMap>

配置就到这里就好
然后我们实现编码

package 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;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisUtil {

    private MyBatisUtil() {

    }

    private static SqlSessionFactory factory;
    static {
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            factory=new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession createSqlSession(){
        //true为自动提交事务
        return factory.openSession(false);
    }
    public static void closeSqlSession(SqlSession sqlSession){
        if (null!=sqlSession){
            sqlSession.close();
        }
    }
}

这个是一个工具类 方便我们直接使用可以基本不用改变

然后使用时创建对应的方法即可。以下是个事例。

 public void testGetUserList(){
        SqlSession sqlSession=null;
        List<Role> roles=new LinkedList<Role>();
        try {
            sqlSession= MyBatisUtil.createSqlSession();
            System.out.println(sqlSession.getMapper(ProviderMapper.class).getProviderById("1").getProName());
           //事务提交
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
            //事务回滚
        }finally {
            MyBatisUtil.closeSqlSession(sqlSession);
        }
        for (Role role:roles){
            System.out.println(role.getRoleName());
        }
    }

本教程就暂时介绍到这里,希望能看到份教程的你喜欢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值