Mybatis学习——基本增删改查(CRUD)
Eclipse+Mybatis+MySql
1.所需jar
2.项目目录
3.源代码
1 package com.zhengbin.entity; 2 3 public class Student { 4 private int id; 5 private String name; 6 private double score; 7 @Override 8 public String toString() { 9 return "Student [id=" + id + ", name=" + name + ", score=" + score + "]"; 10 } 11 public int getId() { 12 return id; 13 } 14 public void setId(int id) { 15 this.id = id; 16 } 17 public String getName() { 18 return name; 19 } 20 public void setName(String name) { 21 this.name = name; 22 } 23 public double getScore() { 24 return score; 25 } 26 public void setScore(double score) { 27 this.score = score; 28 } 29 public Student(int id, String name, double score) { 30 super(); 31 this.id = id; 32 this.name = name; 33 this.score = score; 34 } 35 // *注意这个必须加 36 public Student() { 37 super(); 38 } 39 }
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <!-- 每个映射文件的namespace应该是唯一的 --> 4 <mapper namespace="com.zhengbin.entity.studentMapper"> 5 <!-- parameterType 参数表示需要参数的类型 --> 6 <!-- resultType 参数表示返回结果的类型,该可以写为实体包的全路径,或者在conf.xml配置文件中,声明实体的别名 --> 7 <select id="getStudent" parameterType="int" resultType="Student"> 8 select * from student where id=#{id} 9 </select> 10 11 <select id="getAllStudent" resultType="Student"> 12 select * from student 13 </select> 14 15 <insert id="addStudent" parameterType="Student"> 16 insert into student(name,score) values(#{name},#{score}) 17 </insert> 18 19 <update id="updateStudent" parameterType="Student"> 20 update student set name=#{name},score=#{score} where id=#{id} 21 </update> 22 23 <delete id="deleteStudent" parameterType="int"> 24 delete from student where id=#{id} 25 </delete> 26 </mapper>
1 package com.zhengbin.entity2; 2 3 4 import org.apache.ibatis.annotations.Select; 5 6 import com.zhengbin.entity.Student; 7 8 public interface studentMapper { 9 @Select("select * from student where id=#{id}") 10 public Student testGet(int id); 11 }
1 package com.zhengbin.test; 2 3 import java.util.List; 4 5 import org.apache.ibatis.session.SqlSession; 6 import org.apache.ibatis.session.SqlSessionFactory; 7 8 import com.zhengbin.entity.Student; 9 import com.zhengbin.util.MyBatisUtils; 10 11 public class Test { 12 @org.junit.Test 13 public void testGet(){ 14 SqlSessionFactory sessionFactory = MyBatisUtils.getFactory(); 15 // 参数为TRUE,相当于session.commit(); 16 SqlSession session = sessionFactory.openSession(true); 17 // 读取映射文件 18 String statement = "com.zhengbin.entity.studentMapper" + ".getStudent"; 19 Student s = session.selectOne(statement,5); 20 System.out.println(s); 21 session.close(); 22 } 23 24 @org.junit.Test 25 public void testGetAll(){ 26 SqlSessionFactory sessionFactory = MyBatisUtils.getFactory(); 27 // 参数为TRUE,相当于session.commit(); 28 SqlSession session = sessionFactory.openSession(true); 29 // 读取映射文件 30 String statement = "com.zhengbin.entity.studentMapper" + ".getAllStudent"; 31 List<Student> list = session.selectList(statement); 32 System.out.println(list); 33 session.close(); 34 } 35 36 @org.junit.Test 37 public void testAdd(){ 38 SqlSessionFactory sessionFactory = MyBatisUtils.getFactory(); 39 SqlSession session = sessionFactory.openSession(true); 40 String statement = "com.zhengbin.entity.studentMapper" + ".addStudent"; 41 Student s = new Student(); 42 s.setName("zhengB"); 43 s.setScore(95.9); 44 int insert = session.insert(statement, s); 45 System.out.println(insert); 46 session.close(); 47 } 48 49 @org.junit.Test 50 public void testUpdate(){ 51 SqlSessionFactory sessionFactory = MyBatisUtils.getFactory(); 52 SqlSession session = sessionFactory.openSession(true); 53 String statement = "com.zhengbin.entity.studentMapper" + ".updateStudent"; 54 Student s = new Student(); 55 s.setId(14); 56 s.setName("zhengbin"); 57 s.setScore(96); 58 int update = session.update(statement, s); 59 System.out.println(update); 60 session.close(); 61 } 62 63 @org.junit.Test 64 public void testDelete(){ 65 SqlSessionFactory sessionFactory = MyBatisUtils.getFactory(); 66 SqlSession session = sessionFactory.openSession(true); 67 String statement = "com.zhengbin.entity.studentMapper" + ".deleteStudent"; 68 int delete = session.delete(statement,21); 69 System.out.println(delete); 70 session.close(); 71 } 72 }
1 package com.zhengbin.test; 2 3 import org.apache.ibatis.session.SqlSession; 4 import org.apache.ibatis.session.SqlSessionFactory; 5 6 import com.zhengbin.entity.Student; 7 import com.zhengbin.entity2.studentMapper; 8 import com.zhengbin.util.MyBatisUtils; 9 10 public class Test2 { 11 @org.junit.Test 12 public void testGet(){ 13 SqlSessionFactory sessionFactory = MyBatisUtils.getFactory(); 14 SqlSession session = sessionFactory.openSession(true); 15 studentMapper mapper = session.getMapper(studentMapper.class); 16 Student s = mapper.testGet(14); 17 System.out.println(s); 18 session.close(); 19 } 20 }
1 package com.zhengbin.util; 2 3 import java.io.InputStream; 4 5 import org.apache.ibatis.session.SqlSessionFactory; 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 7 8 public class MyBatisUtils { 9 public static SqlSessionFactory getFactory(){ 10 String resource = "conf.xml"; 11 InputStream is = MyBatisUtils.class.getClassLoader().getResourceAsStream(resource); 12 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); 13 return sessionFactory; 14 } 15 }
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 3 <configuration> 4 <!-- 数据库配置文件 --> 5 <properties resource="jdbc.properties"/> 6 <!-- 取别名 --> 7 <typeAliases> 8 <!-- 方式一、为类取别名 --> 9 <!-- <typeAlias type="com.zhengbin.entity.Student" alias="_Student"/> --> 10 <!-- 方式二、自动以类名为别名 --> 11 <package name="com.zhengbin.entity"/> 12 </typeAliases> 13 <!-- 14 development : 开发模式 15 work : 工作模式 16 --> 17 <environments default="development"> 18 <environment id="development"> 19 <transactionManager type="JDBC" /> 20 <dataSource type="POOLED"> 21 <property name="driver" value="${driver}" /> 22 <property name="url" value="${url}" /> 23 <property name="username" value="${username}" /> 24 <property name="password" value="${password}" /> 25 </dataSource> 26 </environment> 27 </environments> 28 <mappers> 29 <!-- 这是一个路径的结构,不是包的结构 --> 30 <mapper resource="com/zhengbin/entity/studentMapper.xml"/> 31 <mapper class="com.zhengbin.entity2.studentMapper"/> 32 </mappers> 33 </configuration>
1 driver=com.mysql.jdbc.Driver 2 url=jdbc:mysql://localhost:3307/student 3 username=root 4 password=950906
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 3 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 4 <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> 5 <layout class="org.apache.log4j.PatternLayout"> 6 <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" /> 7 </layout> 8 </appender> 9 <logger name="java.sql"> 10 <level value="debug" /> 11 </logger> 12 <logger name="org.apache.ibatis"> 13 <level value="debug" /> 14 </logger> 15 <root> 16 <level value="debug" /> 17 <appender-ref ref="STDOUT" /> 18 </root> 19 </log4j:configuration>
4.遇到的问题
(1)奇怪的junit:如果新建一个class,名为Test则可能出现不能使用注解@Test的情况,此时用@org.junit.Test即可,或者更改class名,不以Test开头 好奇葩
(2)实体类必须要加superclass,否则报错,因为MyBatis无法通过配置文件找到实体类
梦想要一步步来!