首页 > 其他 > 详细

mybatis的CRUD操作和占位符

时间:2020-06-22 13:00:51      阅读:59      评论:0      收藏:0      [点我收藏+]

mybatis中增删改查

增删改一般使用对应的标签来实现, 比如新增用<insert>标签, 删除用<delete>标签, 更新使用<update>标签, 查询使用<select>标签

标签使用

  • id属性在增删改查的标签中一定会出现, 意义为这个sql的唯一标志, 使用mapper接口开发的使用这个id一般为mapper接口中的方法名, 不用mapper接口这个id名字可以任意, 最好见名知意.

  • resultType 属性出现在<select>标签中, 用来指定查询结果的返回类型, 一般为map或者bean(报名+类名)

  • parameterType属性在增删改查中都有可能出现, 用来指定传入参数的类型, 如果为基本类型或包装类型, 可以省略

示例代码

例如新增, mapper.xml可以这样写

<insert id="insert06" parameterType="com.tedu.pojo.Emp">
    insert into emp value(null, #{name}, #{job}, #{salary});
</insert>

根据id删除指定员工

<delete id="deleteById">
    delete from emp where id=#{id};
</delete>

根据名字修改指定员工信息

<update id="update07">
    update emp set job = #{job}, salary = #{salary}
    where name = #{name};
</update>

查询指定id员工

<select id="findById" resultType="com.tedu.pojo.Emp">
    select * from emp where id = #{id};
</select>

java代码中进行调用

// 静态代码块用来获取SqlSession
static SqlSession session = null;
static {
    // 为session进行初始化
    try {
        // 1. 读取mybatis的核心配置文件[mybatis-config.xml]
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        // 2. 通过获取SqlSessionFactory工厂对象
        SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);
        // 3. 后去SqlSession对象(打开与数据库的连接) true: 表示自动提交, 默认是false即手动提交
        session = fac.openSession(true);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

// 新增
@Test
public void testInsert02() {
    Map<String, Object> map = new HashMap();
    map.put("name", "张飞");
    map.put("job", "Java开发工程师");
    map.put("salary", 15000D);
    int rows = session.insert("EmpMapper.insert06", map);
    System.out.println("影响行数: " + rows);
}

// 删除
@Test
public void testdeleteById() {
    int id = 13;
    int rows = session.delete("EmpMapper.deleteById", id);
    System.out.println("影响行数: " + rows);
}

// 修改
@Test
public void testUpdate02() {
    // 将SQL语句中的参数封装到Emp对象中
    Emp emp = new Emp(null, "张飞", "架构师", 25000D);
    int rows = session.update("EmpMapper.update07", emp);
    System.out.println("影响行数: " + rows);
}

// 查询
@Test
public void testFindById() {
    Integer id = 1;
    // 根据namespace+id找到并执行SQL语句, 返回执行结果
    Emp emp = session.selectOne("EmpMapper.findById", id);
    System.out.println(emp);
}

mybatis中的占位符

#{}:表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

${}:表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。

案例

动态指定要显示的列

mapper.xml

<select id="findAll02" resultType="com.tedu.pojo.Emp" parameterType="string">
    select ${colName} from emp;
</select>

java代码(应用了上面的session`)

@Test
public void testFindAll02() {
    String colName = "id, name";
    Map<String, Object> map = new HashMap<>();
    map.put("colName", colName);
    List<Emp> list = session.selectList("EmpMapper.findAll02", map);
    for (Emp emp : list) {
        System.out.println(emp);
    }
}

mybatis的CRUD操作和占位符

原文:https://www.cnblogs.com/zpKang/p/13176254.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!