MyBatis增删改查操作Demo

客官°小女子只卖身不卖艺 2022-05-13 12:20 399阅读 0赞
  • 第一步:导包:mybatis及jdbc connector.jar
  • 第二步:编写数据库总配置文件SqlMapConfig.xml(引入如下.dtd约束文件)
    “http://ibatis.apache.org/dtd/ibatis-3-config.dtd“>
  • 第三步:配置表和类的映射文件,实体类名.xml(在里面写sql语句)
  • 第四步:创建数据库会话session,进行增删改查

文件目录
这里写图片描述

SqlMapConfig.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
  3. <configuration>
  4. <!-- 可以给实体类取别名,这个放在前面,放在后面会出错 -->
  5. <typeAliases>
  6. <typeAlias type="com.test.entity.Student" alias="Student"/>
  7. </typeAliases>
  8. <!-- step1:配环境 -->
  9. <environments default="e1">
  10. <environment id="e1">
  11. <!-- 先配事务,事务是必须配的,简单的事务类型JDBC -->
  12. <transactionManager type="JDBC"></transactionManager>
  13. <!-- 再配数据源,POOLED 以连接池的方式 -->
  14. <dataSource type="POOLED">
  15. <!-- 在数据源中配置连接属性,注意这里是username不是user -->
  16. <property name="driver" value="com.mysql.jdbc.Driver"/>
  17. <property name="url" value="jdbc:mysql://localhost:3306/test"/>
  18. <property name="username" value="root"/>
  19. <property name="password" value="root1205"/>
  20. </dataSource>
  21. </environment>
  22. </environments>
  23. <!-- step2:引入实体类的映射配置文件 -->
  24. <mappers>
  25. <mapper resource="com/test/entity/Student.xml"/>
  26. </mappers>
  27. </configuration>

Student.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD SQL Map 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
  3. <!-- 命名空间必须要加上,解决sql语句id重复 -->
  4. <mapper namespace="ns1">
  5. <!-- 插入数据 -->
  6. <!-- 写死的 -->
  7. <insert id="save">
  8. insert into student(name,age)values('一茶',18)
  9. </insert>
  10. <!-- 使用占位符,不是问号了,其中id,name指的是session的insert方法所传对象参数的属性 -->
  11. <insert id="save2">
  12. insert into student(name,age)values(#{name},#{age})
  13. </insert>
  14. <insert id="save3">
  15. insert into student(name,age)values(#{name},#{age});
  16. </insert>
  17. <!-- 修改数据 -->
  18. <update id="mod1">
  19. update student set name='王五',age='10' where id=1
  20. </update>
  21. <update id="mod2">
  22. update student set name=#{name},age=#{age} where id=1
  23. </update>
  24. <!-- 删除数据 -->
  25. <delete id="del1">
  26. delete from student where id=1
  27. </delete>
  28. <delete id="del2">
  29. delete from student where name=#{name} and age=#{age}
  30. </delete>
  31. <!-- 查询数据 -->
  32. <!-- ExecutorException:excIt's likely that neither a Result Type nor a Result Map was specified. -->
  33. <!-- 默认会自动映射,所以resultMap可以不配,如果要自定义映射要配置resultMap -->
  34. <!-- 可以给com.test.entity.Student配别名,在SqlMapConfig里配typeAliases -->
  35. <!-- <select id="query1" resultType="com.test.entity.Student"> -->
  36. <select id="query1" resultType="Student">
  37. select * from student where id=2
  38. </select>
  39. <select id="query2" resultType="Student">
  40. select * from student where name=#{name}
  41. </select>
  42. <select id="query3" resultType="Student" parameterType="java.lang.String">
  43. select * from student where name=#{_parameter}
  44. </select>
  45. <select id="query4" resultType="Student" parameterType="int">
  46. select * from student where id=#{_parameter}
  47. </select>
  48. <!-- 默认是自动映射,还可以自定义映射,要配置resultMap -->
  49. <resultMap type="Student" id="myMap">
  50. <!-- 虽然我只映射了一个表字段,但剩下的字段会按默认情况映射 -->
  51. <result property="name" column="name2"/>
  52. </resultMap>
  53. <select id="query5" resultType="Student" resultMap="myMap">
  54. select name as name2,age,school from student where id=#{_parameter}
  55. </select>
  56. <select id="query6" resultType="Student">
  57. select * from student where 1=1
  58. </select>
  59. <select id="query7" resultType="Student" parameterType="java.lang.String">
  60. select * from student where name=#{_parameter}
  61. </select>
  62. <select id="query8" resultType="Student">
  63. select * from student where 1=1
  64. </select>
  65. <select id="query9" resultType="Student" parameterType="java.lang.String">
  66. select * from student where name=#{_parameter}
  67. </select>
  68. </mapper>

TestDemo.java

  1. package com.test.test;
  2. import java.io.IOException;
  3. import java.io.Reader;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Set;
  9. import org.apache.ibatis.io.Resources;
  10. import org.apache.ibatis.session.SqlSession;
  11. import org.apache.ibatis.session.SqlSessionFactory;
  12. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  13. import com.test.entity.Student;
  14. public class TestDemo {
  15. /** * @param args * @throws IOException */
  16. public static void main(String[] args) throws IOException {
  17. // 测试能否连接数据库,并插入数据
  18. //第一步:和数据库连接(获取与数据库会话对象)
  19. SqlSession session = null;
  20. SqlSessionFactory sessionFactory = null;
  21. SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
  22. Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
  23. sessionFactory = factoryBuilder.build(reader);
  24. session = sessionFactory.openSession();
  25. //System.out.println(session);//测试是否连接成功
  26. //第二步:和数据库交互
  27. //op1:插入数据
  28. //session.insert("ns1.save");
  29. //Map map = new HashMap();
  30. //map.put("name", "zhangsan");
  31. //map.put("age", "18");//此处的18虽然是字符串,但是也按int插入到age字段里了
  32. //session.insert("ns1.save2",map);
  33. //Student stu = new Student();
  34. //stu.setAge(20);
  35. //stu.setName("lisi");
  36. //session.insert("ns1.save3", stu);
  37. //op2:修改数据
  38. //session.update("ns1.mod1");
  39. //Student stu2 = new Student();
  40. //stu2.setAge(20);
  41. //stu2.setName("lisi2");
  42. //session.update("ns1.mod2", stu2);
  43. //op3:删除数据
  44. //session.delete("ns1.del1");
  45. //Student stu3 = new Student();
  46. //stu3.setAge(20);
  47. //stu3.setName("lisi");
  48. //session.delete("ns1.del2",stu3);
  49. //op4:查询数据
  50. //selectOne
  51. Student sd1 = session.selectOne("ns1.query1");
  52. System.out.println(sd1.getName());
  53. System.out.println(sd1.getAge());
  54. Map map2 = new HashMap();
  55. map2.put("name", "张三");
  56. //传一个参数这样传太费劲了,name='张三'有两条数据,selectOne返回的结果只能是null或一条,所以此时报异常
  57. //Expected one result (or null) to be returned by selectOne(), but found: 2
  58. //System.out.println(session.selectOne("ns1.query2",map2));
  59. //直接传字符串,需要制定parameterType以及占位符用_parameter
  60. Student sd3 = session.selectOne("ns1.query3","马冬梅");
  61. System.out.println(sd3.getAge());
  62. Student sd4 = session.selectOne("ns1.query4", new Integer(11));
  63. System.out.println(sd4.getName());
  64. Student sd5 = session.selectOne("ns1.query5", new Integer(11));
  65. System.out.println(sd5.getName());
  66. System.out.println(sd5.getAge());
  67. System.out.println(sd5.getSchool());
  68. //selectList
  69. List<Student> sList = session.selectList("ns1.query6");
  70. for(Student s:sList){
  71. System.out.println(s.getName()+","+s.getAge());
  72. }
  73. List<Student> sList2 = session.selectList("ns1.query7", "张三");
  74. for(Student s:sList2){
  75. System.out.println(s.getName()+","+s.getAge());
  76. }
  77. //selectMap
  78. //selectMap(String s1,String s2)返回的结果是以指定列s2为key,以Bean为value的map
  79. Map<Integer,Student> map = session.selectMap("ns1.query8","id");
  80. Set<Integer> k = map.keySet();
  81. Iterator<Integer> it = k.iterator();
  82. while(it.hasNext()){
  83. int key = it.next();
  84. System.out.print(key+"-----"+map.get(key).getId());
  85. System.out.print(","+map.get(key).getName());
  86. System.out.print(","+map.get(key).getAge());
  87. System.out.println(","+map.get(key).getSchool());
  88. }
  89. //selectMap(String s1,Object obj,String s2)返回的结果是以指定列s2为key,以Bean为value的map
  90. Map<Integer,Student> map3 = session.selectMap("ns1.query9", "张三", "id");
  91. Set<Integer> k3 = map3.keySet();
  92. Iterator<Integer> it3 = k3.iterator();
  93. while(it3.hasNext()){
  94. int key = it3.next();
  95. System.out.print(key+"-----"+map3.get(key).getId());
  96. System.out.print(","+map3.get(key).getName());
  97. System.out.print(","+map3.get(key).getAge());
  98. System.out.println(","+map3.get(key).getSchool());
  99. }
  100. //必须写提交,不会默认提交的,此处不写,不会提交到数据库
  101. session.commit();
  102. }
  103. }

发表评论

表情:
评论列表 (有 0 条评论,399人围观)

还没有评论,来说两句吧...

相关阅读