一、mybatis入门

我的理解mybatis就是把sql语句剥离出来。
mybatis基本配置

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>
    <properties resource="jdbc.properties"/>
    <typeAliases>
        <package name="com.hfview.po"/>
    </typeAliases>
    <!--定义数据源-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
                <property name="url" value="${url}"/>
            </dataSource>
        </environment>
    </environments>
    <!--这里就是剥离出来的sql语句-->
    <mappers>
        <mapper resource="com/hfview/po/user.xml"/>
        <mapper resource="com/hfview/po/menu.xml"/>
        <mapper resource="com/hfview/po/car.xml"/>
        <mapper resource="com/hfview/po/coach.xml"/>
        <mapper resource="com/hfview/po/driverecord.xml"/>
        <mapper resource="com/hfview/po/orderrecord.xml"/>
        <mapper resource="com/hfview/po/userscore.xml"/>
    </mappers>
</configuration>

其中一个mapper大概是这样

<?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="com.hfview.po.User">

    <sql id="userColumns">id,password,name,sex,cellPhone,startTime,endTime,dropTime,nowType,expType,description,status,image,coachId,cardId</sql>
    <sql id="menuColumns">menuId,menuName,menuLevel,menuParentId,menuParentName,menuURL,menuOrder,description
    </sql>

    <insert id="add" parameterType="User">
        insert into T_User (password,name,sex,cellPhone,startTime,endTime,dropTime,nowType,expType,description,status,image,coachId,cardId) 
        values(#{password},#{name},#{sex},#{cellPhone},#{startTime},#{endTime},#{dropTime},
        #{nowType},#{expType},#{description},#{status},#{image},#{coachId},#{cardId})
    </insert>

    <insert id="add_batch" parameterType="map">
        insert into T_UserAction (userId,menuId) 
        values (#{userId},#{menuId})

    </insert>

    <update id="edit" parameterType="User">
        update T_User set password=#{password},name=#{name},sex=#{sex},cellPhone=#{cellPhone},startTime=#{startTime},endTime=#{endTime},dropTime=#{dropTime},
        nowType=#{nowType},expType=#{expType},description=#{description},status=#{status},image=#{image},coachId=#{coachId},cardId=#{cardId}
        where id=#{id}
    </update>

    <delete id="delete" parameterType="int">
        delete T_User where id=#{id}
    </delete>
    <delete id="delete_union" parameterType="int">
        delete T_UserAction where userId=#{userId}
    </delete>

    <select id="login" parameterType="int" resultType="User">
        select
        *
        from T_User where name=#{name}
    </select>

    <select id="getById" parameterType="int" resultType="User" >
        select
        *
        from T_User where id=#{id}
    </select>

    <select id="getAll" resultType="User" >
        select
        *
        from T_User 
    </select>

    <select id="getDiffType" parameterType="int" resultType="User" >
        select
        *
        from T_User where status=#{type}
    </select>

    <select id="getMenu" parameterType="int" resultType="Menu">
        select b.* from T_UserAction a,T_Menu b where a.MenuId = b.menuId and a.userId=#{id}
    </select>


</mapper>

然后定义SqlSessionFactory和SqlSession的获取方式

package com.hfview.utils;

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

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 class 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 createSession() {
        return factory.openSession();
    }

    public static void closeSession(SqlSession session) {
        if(session!=null) session.close();
    }
}

mybatis的使用

package com.hfview.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Component;

import com.hfview.dao.BaseDao;
import com.hfview.po.Menu;
import com.hfview.po.User;
import com.hfview.utils.DBConnection;
import com.hfview.utils.MyBatisUtil;

@Component
public class UserDaoImpl extends BaseDao<User> {
    public List<Menu> getMenu(Class<User> clz, int id) {
        SqlSession session = null;
        List<Menu> list = null;
        try {
            session = MyBatisUtil.createSession();
            list = session.selectList(clz.getName() + ".getMenu", id);
        } finally {
            MyBatisUtil.closeSession(session);
        }
        return list;
    }

    public void deleteUnion(Class<User> clz, int id) {
        SqlSession session = null;
        try {
            session = MyBatisUtil.createSession();
            session.delete(clz.getName() + ".delete_union", id);
        } finally {
            session.commit();
            MyBatisUtil.closeSession(session);
        }
    }

    public void giveAction(int userId, String[] action) {
        SqlSession session = null;
        Map<String ,Object> map = new HashMap<String, Object>();
        map.put("userId", userId);
        try {
            session = MyBatisUtil.createSession();
            session.delete(User.class.getName()+ ".delete_union", userId);
                for(int i=0;i<action.length;i++){
                    map.put("menuId", action[i]);
                    session.insert(User.class.getName()+ ".add_batch",map);
                    map.remove("menuId");
                }
        } finally {
            session.commit();
            MyBatisUtil.closeSession(session);
        }
    }
    /**
     * 0:退学 
     * 1:在培
     * 2:毕业
     * @return
     */
    public List<User> getDiffType(int type){
        SqlSession session = null;
        List<User> list=null;
        try {
            session = MyBatisUtil.createSession();
            list= session.selectList(User.class.getName() + ".getDiffType", type);
        } finally {
            session.commit();
            MyBatisUtil.closeSession(session);
        }
        return list;
    }
    /**
     * 级联的删除用户
     * @param userId
     */
    public void deleteUser(int userId){
        Connection conn =null;
        PreparedStatement  st=null;
        ResultSet rs=null;

        try {
            conn= DBConnection.getDBConnection();
            st = conn.prepareStatement("{call deleteUser(?)}");
            st.setInt(1,userId);
            st.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }



}

这个只是最基本的配置,后面会将mybatis和spring结合配置、事物配置、以及详细的用法

猜你喜欢

转载自blog.csdn.net/chuxue1989/article/details/79974703