myBatis_动态***

使用和不使用动态***的区别

  • 不适用动态*** , 需要手动获取Session
       private SqlSessionFactory factory;
       public UserDaoImpl(SqlSessionFactory factory){
            this.factory = factory;
       }
        public List<User> findAll() {
            //1.获取sqlSession对象
          SqlSession sqlSession = factory.openSession();
           //2.调用selectList方法
          List<User> list = sqlSession.selectList("com.example.dao.UserDao.findAll");
           //3.关闭流
           sqlSession.close();
           return list;
       }
  • 使用动态***,自动获取session
    //3.获取SqlSession对象
    SqlSession session = factory.openSession();
    //4.获取dao的***对象
    UserDao mapper = session.getMapper(UserDao.class);
    //5.执行查询所有的方法
    List<User> list = mapper.findAll();
    这里的关键代码 List<user> list = sqlSession.selectList("com.example.dao.UserDao.findAll"),需要我们自己手动调用SqlSession里面的方法,基于动态***的方式最后的目标也是成功的调用到这里。</user>

mapper动态***开发四大原则

  • 接口方法名需要与mapper.xml的要调用的sql语句的id一致
  • 接口的形参需要与mapper.xml parameterType 一致
  • 接口的返回值需要与mapper.xml resultType一致
  • mapper.xml中的namespace要与接口的全包名一直
    图片说明
  • 实现类由mybatis动态完成
  • 不用手动写实现类

sqlSession类的代码

package com.test.ServiceFactory;
import org.apache.ibatis.session.SqlSession;
public class sqlSession {
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.getSqlSessionFactory().openSession();
    }
}

sqlSessionFactory 实现类

package com.test.ServiceFactory;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class sqlSessionFactory {
    private static  SqlSessionFactory ssf =null;
    public static SqlSessionFactory getSqlSessionFactory(){
            InputStream in ;    //局部变量就好了
            String resource = "sqlMapConfig.xml";
            try {
                in = Resources.getResourceAsStream(resource);
                SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
                ssf = ssfb.build(in);
            } catch (IOException e) {
                System.out.println("读取配置文件出现异常");
                e.printStackTrace();
            }
            return ssf;
    }
}

test类代码

package com.test.test;
import java.util.LinkedList;
import java.util.List;
import org.junit.Test;
import com.test.ServiceFactory.sqlSession;
import com.test.bean.user;
import com.test.mapper.userMapper;
public class userdaoTest {
//通过Id进行模糊查询    
//    @Test
//    public void DaoTest() {
//        userMapper mapper = new sqlSession().getSqlSession().getMapper(userMapper.class); 
//        user user = mapper.selectUserById(1);
//        System.out.println(user);
//    }

//通过名字模糊查询
    @Test 
    public void DaoTest1() {
        userMapper mapper = new sqlSession().getSqlSession().getMapper(userMapper.class);
        List<user> ls = mapper.selectUserByName("老");
        System.out.println(ls);
    }
}

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.test.mapper.userMapper">
  <!-- 通过id查询用户 -->
  <select id="selectUserById" parameterType="Integer" resultType="com.test.bean.user">
    select * from user where u_id = #{id} 
  </select>

  <!-- 通过名字进行模糊查询 -->
  <select id="selectUserByName" parameterType="String" resultType="com.test.bean.user">
    <!-- 这里用用value 来接收  用其他单词会出问题 -->
    <!--select * from user where u_username like "%${value}%"  -->

    <!-- ${}占位符易产生sql注入问题 尽可能多使用#{}占位符 --> 
      select * from user where u_username like "%"#{name}"%"
  </select>

  <!--添加用户-->
  <insert id="insertuser" parameterType="com.test.bean.user">
  <!-- 通过占位符+字段可以得到一个属性值 -->
  insert into user values(null,#{u_username},#{u_password},#{u_sex},#{u_createTime},#{u_cid})
  <!-- 虽然运行了代码,但是数据库中不会显示保存进去,需要提交事务(jdbc)session提交 -->
  </insert>

  <!-- 修改用户 -->
  <update id="updateuser" parameterType="com.test.bean.user">
  update user set u_username = #{u_username} where u_id =#{u_id}
  </update>

  <!-- 删除用户 -->
  <delete id="deleteuserbyId" parameterType="com.test.bean.user">
  delete from user where u_id = #{id}
  </delete>
</mapper>
全部评论
https://www.cnblogs.com/hopeofthevillage/p/11384848.html
点赞 回复 分享
发布于 2019-10-03 15:33
使用mapper 跟 没使用mapper 可以参考 userDaoImpl 可以得出结论
点赞 回复 分享
发布于 2019-10-03 16:09

相关推荐

KPLACE:首先是板面看起来不够,有很多奖,比我厉害。项目要精减,大概详细描述两到三个,要把技术栈写清楚,分点,什么算法,什么外设,怎么优化,不要写一大堆,分点,你写上去的目的,一是让别人知道你做了这个知识点,然后在面试官技术面的时侯,他知道你会这个,那么就会跟你深挖这个,然后就是个人评价改为专业技能
点赞 评论 收藏
分享
2024-12-29 15:37
已编辑
西华大学 图像识别
程序员牛肉:去不了,大厂算法卡学历吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务