MyBatis是一个ORM框架,是一个基于JDBC的开源框架.其中数据库和相关表必须手工创建。
1、创建数据库以及数据表
create database test; create table t_person( id int primary key auto_increment, name varchar(20) unique not null, age int , sex varchar(10) , birthday date ); 2、配置插入操作的实体类的映射文件 <?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"> <mapper namespace="com.gu.domain.PersonMapper"> <insert id="insertPerson" parameterType="com.gu.domain.Person"> insert into t_person values(null,#{name},#{age},#{sex},#{birthday}); </insert> </mapper>说明:namespace="com.gu.domain.PersonMapper" :取值必须唯一,一般建议使用包名+类名
paramentType="com.gu.domain.Person":指定输入参数的数据类型(因为此处我们是插入一个person实体,所以用Person实体类)
resultType="com.gu.domain.Person":指定输出参数的数据类型(只插入无输出情况,所以此处省略不写)
id=”insertPerson” :此处是insert语句的片段,并且id值必须唯一。命名要有规范!
#{ } :表示MyBatis特有的规范写法,使用在xml映射文件中。{ } 内填写与之对应的属性名。如果输入参数的数据类型(parameterType)是“int”类型的,{ }内可以任意填写,其余则不行。
3、测试类
public class test01 { public static void main(String[] args) { String resource = "myBatis.cfg.xml"; try { InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); Person person = new Person("赵丽颖", 17, "女",new Date()); int count= sqlSession.insert("com.gu.domain.PersonMapper.insertPerson",person); sqlSession.commit(); System.out.println("count="+count); } catch (IOException e) { e.printStackTrace(); } } }说明:
· 如何构建SqlSessionFactory?
从 XML 中构建 SqlSessionFactory步骤:
//1.得到输入流 String resource = "myBatis.cfg.xml"; inputStream=Resources.getResourceAsStream(resource); //2.得到SqlSessionFactory对象 sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //3.得到SqlSession对象 //sqlSession=sqlSessionFactory.openSession();//默认事务不是自动提交的 sqlSession=sqlSessionFactory.openSession(true);//设置事务自动提交,则不需要手工提交事务了·使用sqlSession.insert(statement,parameter)进行数据插入操作。
Statement:namespace+id的值(如:com.gu.domain.PersonMapper.insertPerson)
Parameter:传入的属性值(如:person)
·在进行数据增删改时,必须手动进行事务提交才能在数据表中保存数据。所以在sqlSession.insert()方法后还需要手动的事务提交。事务提交调用sqlSession.commit()方法。
注意:
(1)selectOne和selectList 都可以查询到用户,但是两者有明显的区别:
SelectOne : 表示查询的用户是一个或者是0;
SelectList :表示查询的用户是1个或者多个,返回的是list集合。
当对 对象进行查询时,必须使用SelectList方法。
(2) 在模糊查询时,Parameter传入的属性值要根据映射文件的模糊查询条件进行给定。模糊查询可能查出1个或者多个,所以说模糊查询必须使用selectList方法,返回List集合。
1、映射文件配置信息
<?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"> <mapper namespace="com.gu.domain.PersonMapper"> <update id="updateById" parameterType="com.gu.domain.Person"> update t_person set name=#{name},age=#{age},sex=#{sex},birthday=#{birthday} where id=#{id}; </update> </mapper>2、测试(先查询此用户是否存在,如果存在则进行修改用户信息)
public class test01 { public static void main(String[] args) { String resource = "myBatis.cfg.xml"; try { InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession.selectOne("com.gu.domain.PersonMapper.selectById", 5); if(person!=null){ person.setName("王思聪"); person.setAge(28); person.setSex("女"); person.setBirthday(new Date()); sqlSession.update("com.gu.domain.PersonMapper.updateById",person); sqlSession.commit(); }else{ throw new RuntimeException("查不到此用户"); } } catch (IOException e) { e.printStackTrace(); } } }说明:对用进行修改信息时,使用update语句。
1、映射文件配置信息
<?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"> <mapper namespace="com.gu.domain.PersonMapper"> <delete id="deleteAll"> <!— 删除所有 --> delete from t_person; </delete> </mapper>2、测试
public class test01 { public static void main(String[] args) { String resource = "myBatis.cfg.xml"; try { InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); int count=sqlSession.delete("com.gu.domain.PersonMapper.deleteAll"); sqlSession.commit(); System.out.println("coune="+count); } catch (IOException e) { e.printStackTrace(); } } }说明:删除操作时,直接调用delete方法。