当前位置: 首页 > article >正文

【SSM】mybatis的增删改查

目录

代理Dao方式的增删改查

1. 创建项目

$$1. 在sql.xml里增加日志代码以及user的mapper资源。

$$ 2. 在usermapper里引入接口。

 $$3. 在测试类中引入以下代码,并修改其中名字。

 $$ 4. 实例对象User.java里属性要与表中列严格对应。

2. 查询

1>. 查询所有

2>. 通过id查询

3>. 通过username查询

4>. 分页查找

5>.不同类型查询

6>.计数

3. 插入

4. 修改

5. 删除


代理Dao方式的增删改查

1. 创建项目

这里以上一博客中配置batis创建的user表为例。

创建UserDao接口,创建User实例对象,创建mybatis.xml和sql.xml mapper类以及测试类

$$1. 在sql.xml里增加日志代码以及user的mapper资源。

代码:

<settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
 <mapper resource="mapper/UserMapper.xml"></mapper>

$$ 2. 在usermapper里引入接口。

 $$3. 在测试类中引入以下代码,并修改其中名字。

代码:

 private InputStream in = null;
    private SqlSession session = null;
    private UserDao mapper = null;

    @Before  //前置通知, 在方法执行之前执行
    public void init() throws IOException {
        //加载主配置文件,目的是为了构建SqlSessionFactory对象
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //创建SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //通过SqlSessionFactory工厂对象创建SqlSesssion对象
        session = factory.openSession();
        //通过Session创建UserDao接口代理对象
        mapper = session.getMapper(UserDao.class);
    }

    @After  //@After: 后置通知, 在方法执行之后执行 。
    public void destory() throws IOException {
        //释放资源
        session.close();
        in.close();
    }

 $$ 4. 实例对象User.java里属性要与表中列严格对应。

 

生成访问器与更改器以及toString()。

2. 查询

1>. 查询所有

<!--  id后跟方法的名字  -->
<!--    parameterType 入参的类型-->

        resultType返回结果类型

<select id="findAll" resultType="com.qcby.entity.User">
        select * from user;
    </select>

        在接口那写相应的方法(找到的有很多,所以用List接,因为返回的是对象。List<User>)

List<User> findAll();

 测试:

        mapper.findAll().var回车

@Test
    public void findAll(){
        List<User> users = mapper.findAll();
        for(User user:users){
            System.out.println(user.toString());
        }
    }

2>. 通过id查询

        d是int型,故入参类型为int型,返回实例对象。

<select id="findById" resultType="com.qcby.entity.User" parameterType="int">
        select * from user where id=#{id}
    </select>

        因为通过id查,最后输出的对象只有一个,所以不用List接,用User对象接就好。 

User findById(int id);

测试:

@Test
    public void findById(){
        User user=mapper.findById(1);
        System.out.println(user.toString());
    }

3>. 通过username查询

        入参类型为String类,java中,String在java/lang包下。

<select id="findByUserName" resultType="com.qcby.entity.User" parameterType="java.lang.String">
        select * from user where username=#{username}
    </select>

        可能有很多重名的,所以用List接。

List<User> findByUserName(String username);

测试:

@Test
    public void findByUserName(){
        List<User> users = mapper.findByUserName("熊大");
        for(User user:users){
            System.out.println(user.toString());
        }

    }

4>. 分页查找

        当数据库数据量比较大时,前台分页显示

        select * from user limit pageSize offset pageStart

<select id="findPage" resultType="com.qcby.entity.User" parameterType="int">
        select * from user limit #{pageSize} offset #{pageStart}
    </select>

        两个都是int型,故入参为int型。

在这里,需要用注解区分两个参数

List<User> findPage(@Param("pageSize") int pageSize,@Param("pageStart") int pageStart);

测试:

@Test
    public void findPage(){
        int pageSize=2;//每页显示的数据量
        int pageIndex=1;//当前是第1页
        int pageStart = pageSize*(pageIndex-1);
        List<User> users = mapper.findPage(pageSize, pageStart);
        for(User user:users){
            System.out.println(user.toString());
        }
    }

5>.不同类型查询

        不同类型时,入参为实例对象。

<select id="findByUserNameAndId" resultType="com.qcby.entity.User" parameterType="com.qcby.entity.User">
        select * from user where username=#{username} and id=#{id}
    </select>
List<User> findByUserNameAndId(User user);

测试:

 @Test
    public void findByUserNameAndId(){
       User user=new User();
       user.setId(1);
       user.setUsername("老王");
        List<User> users = mapper.findByUserNameAndId(user);
        for(User u:users){
            System.out.println(user.toString());
        }
    }

6>.计数

这里不用传参,结果为int型。

<select id="getCount" resultType="int">
        select count(*) from user;
    </select>
int getCount();

测试:

 @Test
    public void getCount(){
        System.out.println(mapper.getCount());
    }
    

3. 插入

传参为实例对象,不需要输出结果。

<insert id="insert" parameterType="com.qcby.entity.User">
        insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
    </insert>
int insert(User user);

测试:

在实例对象类里,生成构造器(不包含id)

注意!!需要session事务提交。

@Test
    public void insert(){
        User user=new User("aa",new Date(),"男","保定");
        mapper.insert(user);
        session.commit();//事务提交
    }

4. 修改

同样,修改也不需要输出结果。

<update id="update" parameterType="com.qcby.entity.User">
        update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
    </update>
int update(User user);

测试:

在实例对象类里,生成构造器(包含id)。

注意!!需要session事务提交。

 @Test
    public void update(){
        User user=new User(5,"bb",new Date(),"男","保定");
        mapper.update(user);
        session.commit();
    }

5. 删除

                删除靠 id,因此入参类型为int型。

<delete id="delete" parameterType="int">
        delete from user where id=#{id}
    </delete>
int delete(int id);

测试:

注意!!需要session事务提交。

@Test
    public void delete(){
        mapper.delete(6);
        session.commit();
    }


http://www.kler.cn/a/418654.html

相关文章:

  • ScribblePrompt 医学图像分割工具,三种标注方式助力图像处理
  • 基于Matlab实现三维点坐标生成点云(源码+数据)
  • 行列式与线性方程组解的关系
  • 《装甲车内的气体卫士:上海松柏 S-M4 智能型气体传感器详解》
  • FFmpeg一些常用的命令
  • Cesium中onTick事件监听器
  • 智能产品综合开发 - 智能家居(智能语音机器人)
  • 网安瞭望台第6期 :XMLRPC npm 库被恶意篡改、API与SDK的区别
  • Css、less和Sass(SCSS)的区别详解
  • 华为ACL应用笔记
  • 07.ES11 08.ES12
  • 设备内存指纹
  • 利用Python爬虫精准获取淘宝商品详情的深度解析
  • ros sensor_msgs::Imu详细介绍 Eigen::Vector3d 详细介绍
  • MySQL的一些常用函数
  • ARM实现URAT通信,看门狗中断,裸机开发
  • 开发一套ERP 第八弹 RUst 插入数据
  • docker服务容器化
  • VR眼镜可视化编程:开启医疗信息系统新纪元
  • [保姆式教程]使用labelimg2软件标注定向目标检测数据和格式转换
  • MATLAB中inputdlg函数用法
  • 【开源免费】基于SpringBoot+Vue.JS服装生产管理系统(JAVA毕业设计)
  • Java中的请求重发机制:详细解读与实现
  • nginx 代理 web service 提供 soap + xml 服务
  • 【H2O2|全栈】Node.js(2)
  • Solon (Spring 的替代方案)永久商用免费