zoukankan      html  css  js  c++  java
  • Java学习之Mybatis框架基础篇

    0x00 前言

    续上篇文章的入门篇,继续mark Mybatis内容,上一章节只是写了Mybatis的一个简单查询功能,这篇来写他的删改查等其他操作。

    0x01 Mybatis增加大法

    添加的操作和查询的其实都差别不大,修改一下映射文件,然后从查询的基础上修改一下,就成了增加的功能了,具体看代码:

    <?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.dao.Userdao">
    
        <select id="findAll" resultType="com.test.domain.User">
            select * from user
        </select>
        <insert id="SaveUser" parameterType="com.test.domain.User">
        insert into user(name,address,gender,age,qq,email,username,password) values(#{name},#{address},#{gender},#{age},#{qq},#{email},#{username},#{password})
        </insert >
    
    </mapper>
    
    

    从select标签下面,增加一个insert 标签。

    test类:

    package com.test;
    import com.test.dao.Userdao;
    import com.test.domain.User;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    public class mybatistest {
            @Test
            public void selecttest()throws Exception{
    //    public static void main(String[] args) {
            //1.读取配置文件
            InputStream in = Resources.getResourceAsStream("mapconfig.xml");
            //2.创建SqlSessionFactory工厂
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(in);
            //3.使用工厂生产SqlSession对象
            SqlSession session = factory.openSession();
            //4.使用SqlSession创建Dao接口的代理对象
            Userdao userDao = session.getMapper(Userdao.class);
            //5.使用代理对象执行方法
            List<User> users = userDao.findAll();
            for(User user : users){
                System.out.println(user.toString());
            }
            //6.释放资源
            session.close();
            in.close();
        }
        @Test
        public void Savetest() throws IOException {
            User user = new User();
            user.setName("nice");
            user.setAge(20);
            user.setGender("男");
            user.setAddress("gd");
            user.setQq("2548266145");
            user.setEmail("2548266145@qq.com");
            user.setUsername("nice0e3");
            user.setPassword("nize");
    
    
            InputStream in = Resources.getResourceAsStream("mapconfig.xml");
            //2.创建SqlSessionFactory工厂
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(in);
            //3.使用工厂生产SqlSession对象
            SqlSession session = factory.openSession();
            //4.使用SqlSession创建Dao接口的代理对象
            Userdao userDao = session.getMapper(Userdao.class);
            userDao.SaveUser(user); //调用SaveUser方法参数user对象
            session.commit();//提交事务
        }
    }
    

    在这里面分别有2个方法,一个是查询,一个是添加。虽然说功能完成了,但是这里可以看到前面的一些代码都是重复的,我们可以直接把他重复的代码封装起来,想要执行某一个功能的时候直接调用就可以了。

    package com.test;
    
    
    import com.test.dao.Userdao;
    import com.test.domain.User;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    public class mybatistest {
        private InputStream in;
        private SqlSessionFactoryBuilder builder;
        private Userdao userDao;
        private SqlSession session;
        private SqlSessionFactory factory;
        private User user = new User();
    
        @Before  //被注解后在测试方法执行前会执行
        public void init() throws IOException {
    
    
            in = Resources.getResourceAsStream("mapconfig.xml");
    
            builder = new SqlSessionFactoryBuilder();
            factory = builder.build(in);
    
             session = factory.openSession();
             session.commit();//提交事务
    
            userDao = session.getMapper(Userdao.class);
        }
    
            @Test
            public void selecttest()throws Exception{
    //    public static void main(String[] args) {
            //1.读取配置文件
    
            //5.使用代理对象执行方法
            List<User> users = userDao.findAll();
            for(User user : users){
                System.out.println(user.toString());
            }
            //6.释放资源
    
        }
    
    
        @Test
        public void Savetest() throws IOException {
    
            user.setName("nice");
            user.setAge(20);
            user.setGender("男");
            user.setAddress("gd");
            user.setQq("2548266145");
            user.setEmail("2548266145@qq.com");
            user.setUsername("nice0e3");
            user.setPassword("nize");
    
            userDao.SaveUser(user);
    
    
    
        }
    
        public void Update(){
            
    
        }
        @After  //测试方法执行后执行
        public void destroy() throws IOException {
            session.close();
            in.close();
        }
    
    }
    
    
    

    把配置的信息放正在init方法里面,运行时候自动运行,进行赋值。

    关闭资源的放到destroy方法里面,关闭的时候自动执行关闭资源。

    封装完成后,我们的Savetest的方法除了设置值外,其实也就一行代码就完成了改功能。

    调试好了前面的后面的就好写了,基本上就是复制粘贴。

    0x02 Mybatis修改大法

    前面的框架大体定义好后,在来写个修改的操作。

    userdao接口添加updata方法:

    void UpdataUser(User user);
    

    映射文件添加updata标签:

        <update id="UpdataUser" parameterType="com.test.domain.User">
            update user set username = #{username},address=#{address},age=#{age} where id=#{id}
    
        </update>
    

    基于上面的代码添加一个方法:

    @Test
        public void Update(){
            user.setUsername("nnicee0e3");
            user.setAddress("dgd");
            user.setAge(18);
            user.setId(8);
            userDao.UpdataUser(user);
        }
    

    运行后内容成功被修改。

    0x03 Mybatis delete大法

    至于删除的操作就更简单了。

    userdao接口中添加一个方法:

     void deleteUser(Integer id);
    

    映射文件添加delete标签:

        <delete id="deleteUser" parameterType="Integer">
            delete from user where id = #{id}
        </delete>
    

    test类里面依旧复制粘贴一下代码:

    @Test
        public void delete() {
    
            userDao.deleteUser(6);
        }
    

    0x04 Mybatis 查询单条信息

    一如既往的接口添加方法:

    List<User> findone(Integer id);
    

    一如既往的添加映射文件内容:

    <select id="findone" resultType="com.test.domain.User" parameterType="int">
    
            select * from user where id =#{id}
        </select>
    

    一如既往的test类里面调用方法:

        @Test
        public void findone(){
            List<User> findone = userDao.findone(1);
            System.out.println(findone.toString());
        }
    

    0x05 Mybatis 模糊查询大法

    接口添加方法:

      List<User> findlike(String name);
    

    添加映射文件内容:

    <select id="findlike" resultType="com.test.domain.User" parameterType="string">
            select * from user where name like  #{name}
    
        </select>
    

    test类里面调用方法:

        @Test
        public void findlike(){
            List<User> ming = userDao.findlike("%xiao%");
            for (User user1 : ming) {
                System.out.println(user1);
            }
    
        }
    

    0x06 结尾

    只要会用了基本的增删改查和定义sql语句后,其他的只要会复制粘贴就行。

  • 相关阅读:
    Springboot 之 自定义配置文件及读取配置文件
    SQLSERVER系统视图 sql server系统表详细说明
    MySQL Workbench建表时 PK NN UQ BIN UN ZF AI 的含义
    使用Ecplise git commit时出现"There are no stages files"
    maven添加sqlserver的jdbc驱动包
    java将XML文档转换成json格式数据
    java将XML文档转换成json格式数据
    cannot be resolved. It is indirectly referenced from required .class files
    org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value '2012-12-12 12:01:01': not a valid representation (error: Can not parse date "2012-12-
    @Autowired注解和静态方法 NoClassDefFoundError could not initialize class 静态类
  • 原文地址:https://www.cnblogs.com/nice0e3/p/13575140.html
Copyright © 2011-2022 走看看