学习笔记-Mybatis(二)

基本的增删改查:
实体类(映射数据库表)–>Mybatis-config.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.bean">
    <insert id="addCategory" parameterType="Category">
        insert into category_(name) values (#{name})
    </insert>

    <delete id="deleteCategory" parameterType="Category">
        delete from category_ where id= #{id}
    </delete>

    <select id="getCategory" parameterType="_int" resultType="Category">
        select * from category_ where id=#{id}
    </select>

    <update id="updateCategory" parameterType="Category">
        update category_ set name=#{name} where id=#{id}
    </update>

    <select id="listCategory" resultType="Category"><!-- 因为myBatis-config.xml直接写Category -->
        select * from category_
    </select>
</mapper>

parameterType的用法:


1.基本数据类型,如输入参数只有一个,其数据类型可以是基本的数据类型,也可以是自己定的类类型。包括int,String,Integer,Date,如下:

(1)根据id进行相应的删除:<delete id="deleteById" parameterType="Integer">

(2)添加员工:<insert id="addEmp" parameterType="com.pojo.Employee">

2.复杂数据类型:包含java实体类,map。


另外MyBatis还提供了一个使用注解来参入多个参数的方式。这种方式需要在接口的参数上添加@Param注解
/**
* 此处要注意的是,由于该方法需要传入多个参数,在进行Mybatis配置时,
* 没有办法同时配置多个参数,另外MyBatis还提供了一个使用注解来参入
* 多个参数的方式。这种方式需要在接口的参数上添加@Param注解。。
* 注意,以下两种写法是完全相同的。但使用的时候要使用第一种类型
*/Userlogin(@Param(value=”name”)Stringname,@Param(value=”password”)String password );
// User login(String name,String password);
配置如下:

<select id="login"  resultType="com.pojo.User">
 select * from us where name=#{name} and password=#{password}
</select>

注:不同版本的MyBatis对基本类型传递过来的参数名称不能识别,要使用_parameter来代替。

<select id="getWinLogByEventId" parameterType="java.lang.Long"
resultMap="BaseResultMap">
select <include refid="Base_Column_List"/> from win_log where eventId = #{_parameter,jdbcType=BIGINT} </select>

3.获取参数中的值:

1.基本数据类型:#{参数}获取参数中的值

2.复杂数据类型:#{属性名},map中则是#{key}


测试类:

public class TestMybatis {
    public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 通过配置文件"mybatis-config.xml"得到SQLSessionFactory(创建SqlSession对象的工厂)
        SqlSession session = sqlSessionFactory.openSession();
        // 通过SQLSessionFactory得到Session
        Category c = new Category();
        // 增加
        c.setName("addCategory");
        session.insert("addCategory", c);
        // 删除
        c.setId(6);
        session.delete("deleteCategory", c);
        // 查询
        c = session.selectOne("getCategory", 3);
        System.out.println(c.getName());
        // 更改
        c = session.selectOne("getCategory", 4);
        c.setName("修改了姓名");
        session.update("updateCategory", c);

        // 遍历
        listAll(session);

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

    }

    private static void listAll(SqlSession session) {
        // TODO Auto-generated method stub
        List<Category> cs = session.selectList("listCategory");
        // 通过session的selectList方法,调用sql语句listCategory。
        for (Category c : cs) {
            System.out.println(c.getName());
        }

    }

}

模糊查询:
实体类配置文件:

<select id="listCategoryByName" parameterType="String"
        resultType="Category">
        select * from category_ where name like concat('%',#{0},'%')
        <!-- 如果是oracle,写法是  -->
        <!-- select * from   category_  where name like '%'||#{0}||'%' -->
    </select>

测试代码:

List<Category> cs = session.selectList("listCategoryByName", "cat");
        for (Category c1 : cs) {
            System.out.println(c1.getName());
        }

多条件查询:
结合前面的模糊查询,多一个id>多少的条件
1. Category.xml 准备sql语句

<select id="listCategoryByIdAndName" parameterType="map"
        resultType="Category">
    select * from category_ where id> #{id} and name like concat('%',#{name},'%')
    </select>
  1. 测试代码
    因为是多个参数,而selectList方法又只接受一个参数对象,所以需要把多个参数放在Map里,然后把这个Map对象作为参数传递进去
Map<String, Object> params=new HashMap<>();
        params.put("id", 0);
        params.put("name", "cat");

        List<Category> cs = session.selectList("listCategoryByIdAndName", params);
        for (Category c1 : cs) {
            System.out.println(c1.getName());
        }
posted @ 2018-03-01 16:21  小沐酱  阅读(217)  评论(0编辑  收藏  举报