用Mybatis对单个表进行增删改查操作

初学Mybatis小结,小白一枚,不足之处欢迎指正!

如何用Mybatis对单个表进行增删改查操作?这里我以snacknet数据库中的一个表为例

1、导包 数据库的驱动包和mybatis的驱动包

 

2、写配置文件mybatis-config.xml,告诉mybatis如何连接数据库

2.1mybatis-config.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <!-- 引入一个资源文件 -->
    <properties resource="db.properties"></properties>
    
     <!--注册对象的空间命名  环境配置,连接的数据库-->
    <environments default="development">
        <environment id="development">
            <!--指定事务管理的类型,这里简单使用Java的JDBC的提交和回滚设置-->
            <transactionManager type="JDBC" />
            <!--dataSource 指连接源配置,POOLED是JDBC连接对象的数据源连接池的实现-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${pwd}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/GoodsTypeMapper.xml" />
    </mappers>
</configuration>

 

2.2 db.properties因为这里不是xml文件故不需要用&amp;转义

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/snacknet?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useOldAliasMetadataBehavior=true
username=root
pwd=a

3、根据数据库中表写—个实体类

public class GoodsType{
    private Integer tno;
    private String tname;
    private Integer status;
    public Integer getTno() {
        return tno;
    }
    public void setTno(Integer tno) {
        this.tno = tno;
    }
    public String getTname() {
        return tname;
    }
    public void setTname(String tname) {
        this.tname = tname;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    @Override
    public String toString() {
        return "GoodsType [tno=" + tno + ", tname=" + tname + ", status=" + status + "]";
    }
    public GoodsType(Integer tno, String tname, Integer status) {
        super();
        this.tno = tno;
        this.tname = tname;
        this.status = status;
    }
    public GoodsType() {
        super();
    }
    
}

4、写实体类跟数据库表中数据的映射,即SQL语句的mapper文件。

<?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">

<!-- 命名空间, 跟java里面的包作用是一样的,用来避免命名冲突的 -->
<mapper namespace="GoodsType">
    <!-- 配置在这里面的每一个SqL语句,都必须指定一个唯一的ID(同一个命名空间下唯一就行)。到时候我们通过namespace.id来获取一个唯一的SQL操作语句
        resultType:执行查询语句查询后返回结果的类型。注意是一条数据对应的类型,不是整个结果对应的类型db.finds(GoodsTyep.class)      List<GoodsTyp>
     -->
     <select id="findAll" resultType="com.yc.mybatis.bean.GoodsType">
         select tno, tname, status from goodstype
     </select>
    
     <select id="finds" resultType="map">
         select tno, tname, status from goodstype
     </select>
    
      <select id="findByTid" resultType="com.yc.mybatis.bean.GoodsType" parameterType="int">
         select tno, tname, status from goodstype where tno=#{_paramter}
     </select>
    
     <!-- #{} 取值会用占位符即预编译方式
           ${} 取值会用字符串拼接方式
      -->
      <insert id="add" parameterType="com.yc.mybatis.bean.GoodsType">
          insert into goodstype values(0, #{tname}, #{status})
      </insert>
      
      <update id="update" parameterType="map">
          update goodstype set tname=#{tname} where tno=#{tno}
      </update>
      
     <delete id="delete" parameterType="map">
         delete from goodstype where tno=#{tno}
     </delete>
</mapper>

 

 5、测试

public class Demo01 {
    private SqlSession session = null;  
     {
        try(InputStream is = Resources.getResourceAsStream("mybatis-config.xml")){
            //构建SqlSessionFactory  查询会话工厂
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            
            //获取SqlSession
            session = sqlSessionFactory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
     //查询
     @Test
     public void test1() {
            //通过SQlSession执行语句 第一个参数是要执行sql语句的id 第二个参数是执行语句中占位符的值
            List<GoodsType> list = session.selectList("GoodsType.findAll");
            list.forEach(System.out::println);
     }
     //以Map方式返回 查询
     @Test
     public void test2() {
            //通过SQlSession执行语句 第一个参数是要执行sql语句的id 第二个参数是执行语句中占位符的值
            List<Map<String, Object>> list = session.selectList("GoodsType.finds");
            list.forEach(System.out::println);
     }
    
     //单个查询
     @Test
     public void test3() {
            GoodsType type = session.selectOne("GoodsType.findByTid", 103);
            System.out.println(type);
     }
    
     //添加操作
     @Test
     public void test4() {
            try {
                int result = session.insert("GoodsType.add", new GoodsType(0,"辣条", 1));
                System.out.println(result);
                session.commit();
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                if(session != null) {
                    session.close();
                }
            }
     }
    
     //修改操作
     @Test
     public void test5() {
            try {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("tname", "唐人神");
                map.put("tno", 106);
                
                 int result = session.insert("GoodsType.update",map);
                System.out.println(result);
                session.commit();
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                if(session != null) {
                    session.close();
                }
            }
     }
    
     //删除操作
     @Test
     public void test6() {
            try {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("tno", 106);
                
                 int result = session.insert("GoodsType.delete",map);
                System.out.println(result);
                session.commit();
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                if(session != null) {
                    session.close();
                }
            }
     }
}


5.1 测试一

 

 

 5.2 测试二

 

 

 5.3 测试三

 

 

 5.4 测试四

添加成功

 

再次查询看看

 

 

 5.5 测试五

修改成功

 

 

 再次查询成功

 

 

 5.6 测试六

删除成功

 

 

 再次查询成功

 

总结:

即通过mybatis-config.xml创建一个SqlsessionFactory对象,从SqlsessionFactory中通过opensqlsession()获取一个Sqlsession对象,通过sqlsession对象执行sgl语句根据sql的id值,注意这个id值前面必须加上namespace

 

posted @ 2020-11-15 15:13  憬荃  阅读(563)  评论(0)    收藏  举报