mybatis另外两种方法实现crud

mybatis另外两种方法实现crud

mybatis的接口+xml方法

在配置文件中添加映射,

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节点
        里面有配置信息 分别是环境和映射
         其中环境里有datasource,里面有我们熟悉的连接数据库的四个字符串
-->
<configuration>

    <!--
        引入db的配置文件信息,后面用到的四个连接字符串就可以直接使用 ${}的方式来动态引入
    -->
    <properties resource="db.properties">
    </properties>

    <!--
        给当前mybatis项目添加日志功能,该STDOUT_LOGGING值的好处是不用添加第三方jar包就可以有日志的输出
    -->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <typeAliases>
        <!--<typeAlias type="com.qfedu.pojo.Order" alias="abc" />-->
        <package name="com.qfedu.pojo" />
    </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="${user}"/>
                <property name="password" value="${pass}"/>
            </dataSource>
        </environment>
    </environments>
<mappers>
        <mapper resource="com/qfedu/dao/UserMapper.xml"/>
    </mappers>
    </configuration>
  

添加接口,

package com.qfedu.dao;

import com.qfedu.pojo.User;

import java.util.List;

public interface IUserDao {

    /**
     *  查询所有的User对象
     * @return User对象的列表
     */
    List<User> getAllUsers();

    /**
     * 新增一个User对象
     * @param u 要新增的用户对象
     * @return 受影响的行数
     */
    int saveUser(User u);
}

映射文件是有特别要求的

  1. namespace必须是接口的全路径
  2. 每个节点的id必须是接口的方法名
  3. 该接口中方法不允许重载,否则namespace+id将不唯一
  4. 注意该接口中的增删改的方法的返回值,最好使用int

UserMapper.xml

<?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.qfedu.dao.IUserDao">
    
    <!--
        ID为接口中的方法名
    -->
    <select id="getAllUsers" resultType="User">
      select * from user
    </select>

    <insert id="saveUser" >
        insert into user values(null, #{username}, #{password}, #{age}, #{addr})
    </insert>

    <update id="updateUser">
        update user set username = #{username}, password =#{password}, age=#{age}, addr = #{addr} where uid = #{uid}
    </update>
</mapper>

封装了一个Utils,

Session.java

public class SessionUtils {

    private static SqlSession mSession = null;
    private static SqlSessionFactory mFactory = null;

    static {
        try {
            mFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    /**
     * 获取SqlSession对象
     * @return
     */
    public static SqlSession getSession(){

        mSession = mFactory.openSession(true);

        return mSession;
    }

    /**
     * 关闭SqlSession对象
     * @param session 要关闭的SqlSession对象
     */
    public static void closeSession(SqlSession session){
        if(session != null){
            session.close();
            session = null;
        }
    }
}

纯注解方式

添加映射,有两个方法

  1. 使用标签mapper,
<mapper class="com.qfedu.dao.IUserDao2" />
  1. 使用标签package,此包下的接口都能被使用
<package name="com.qfedu.dao" />

在接口上直接使用注解,需要注意的是传单个值是,命名可以随便,但当传两个或两个以上的,必须使用param1或arg0开始

public interface IUserDao2 {

    @Select("select * from user")
    List<User> getAllUsers();

    @Select("select * from user where uid = #{fdsa}")
    User getUserByUid(int uid);

    @Insert("insert into user values(null, #{username}, #{password}, #{age}, #{addr})")
    int saveUser(User u);
    
    //@Select("select * from user where username=#{arg0} and password=#{arg1}")
    @Select("select * from user where username=#{param1} and password=#{param2}")
    User login(String username, String password);
}

可以在传参上添加注解@Param,就可以在传值名称上添加标准名称

@Select("select * from user where username=#{username} and password=#{password}")
    User login2(@Param("username") String username, @Param("password") String password);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。