用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文件故不需要用&转义
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

浙公网安备 33010602011771号