前面讲了MyBatis面向接口编程:http://blog.csdn.net/x_iya/article/details/71440264
我们基于以上形式实现数据的CRUD操作。
我们只需要修改三个地方:sql映射文件、接口、测试类。
- insert – 映射插入语句
<insert id="AddPerson" parameterType="com.xiya.entity.Person" useGeneratedKeys="true" keyProperty="id"> INSERT INTO persons(name, age) VALUES(#{name}, #{age}) </insert>
id和parameterType分别与PersonDao接口中的AddPerson方法的名字和参数类型一致。以#{name}的形式引用Person参数的name属性。
MyBatis将使用反射机制读取Person参数的name属性。#{name}对大小写敏感。引用其他属性和name类似。
useGeneratedKeys设置 为"true"表明要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入到Student的id属性
使用:
Person newPerson = new Person("阡陌", 24);
personMapper.AddPerson(newPerson);
sqlSession.commit();
System.out.println(newPerson.getId());
- update – 映射更新语句
<update id="updatePerson" parameterType="com.xiya.entity.Person"> UPDATE persons SET name = #{name}, age = #{age} WHERE id = #{id} </update>
- delete – 映射删除语句
<delete id="deletePersonById" parameterType="int"> DELETE FROM persons WHERE id = #{id} </delete>
- select – 映射查询语句
查询返回单个数据:
<select id="getPersonById" parameterType="int" resultType="com.xiya.entity.Person"> SELECT * FROM persons WHERE id = #{id} </select>查询返回集合数据:
<resultMap id="persons" type="com.xiya.entity.Person"> <result column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="age"/> </resultMap> <select id="getAllPersons" resultMap="persons"> SELECT * FROM persons </select>PersonDao.java
package com.xiya.dao; import com.xiya.entity.Person; import org.apache.ibatis.annotations.Select; import java.util.List; public interface PersonDao { Person getPersonById(int id); List<Person> getAllPersons(); void deletePersonById(int id); void AddPerson(Person person); void updatePerson(Person person); }
测试:
package com.xiya.test; import com.xiya.dao.PersonDao; import com.xiya.entity.Person; 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 java.io.IOException; import java.io.InputStream; import java.util.List; public class Main { public static void main(String[] args) { InputStream in = null; SqlSessionFactory sqlSessionFactory; SqlSession sqlSession; try { in = Resources.getResourceAsStream("mybatis-config.xml"); } catch (IOException e) { e.printStackTrace(); } sqlSessionFactory = new SqlSessionFactoryBuilder().build(in, "development"); sqlSession = sqlSessionFactory.openSession(); PersonDao personMapper = sqlSession.getMapper(PersonDao.class); //增加 /*Person newPerson = new Person("阡陌", 24); personMapper.AddPerson(newPerson); sqlSession.commit();*/ //删除 /*personMapper.deletePersonById(12); sqlSession.commit();*/ //修改 /*Person person = personMapper.getPersonById(3); person.setAge(100); person.setName("芊漪"); personMapper.updatePerson(person); sqlSession.commit();*/ //查询(返回Person) /*Person person = personMapper.getPersonById(1); System.out.println(person);*/ //查询(返回Person集合) List<Person> list = personMapper.getAllPersons(); for (Person p : list) { System.out.println("id = " + p.getId() + " name = " + p.getName() + " age = " + p.getAge()); } //关闭 SqlSession sqlSession.close(); } }
几个关键点:
对于增删改操作,都需要执行sqlSession.commit();否则虽然可以打印出来执行的操作及其结果,但是没有真正对数据库执行相应的操作。
parameterType:指定输入参数的类型。
resultType:指定输出参数的类型。
#{}表示一个占位符号。
#{id}:其中的id表示接收输入的参数,参数名称就是id,如果输入参数是简单类型,#{}的参数名可以任意。
${}表示一个拼接符号,会引起sql注入,所以不建议使用。
参考:
http://www.yihaomen.com/article/java/305.htm