开发工具:mysql +IDEA
什么是 MyBatis?
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。MyBatis和Hibernate的使用基本一样,区别在于Hibernate在Java代码中实现数据库操作,集成度高;Mybatis在注解或者xml文件中通过配置实现SQL语句,更加灵活
MyBatis实例:
目录结构
一:我们先导依赖,需要用到mysql和mybatis的jar包
<!-- 引入 Mysql依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.43</version> </dependency> <!--MyBatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency>
二:创建并配置MyBatis的配置文件
mybatis-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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <!-- xml映射 --> <mapper resource="com/entity/Person.xml"/>
</mappers> </configuration>三:写实体类
Person
package com.entity; public class Person { private int pid; private String pname; private int page; public Person() { } public Person(int pid, String pname, int page) { this.pid = pid; this.pname = pname; this.page = page; } public Person(String pname) { this.pname = pname; } public Person(String pname, int page) { this.pname = pname; this.page = page; } //get和set方法 public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } @Override public String toString() { return "Person{" + "pid=" + pid + ", pname='" + pname + '\'' + ", page=" + page + '}'; } }四:在映射文件中实现增删改查操作Person.xml
<?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.dao.PersonDao"> <!-- 配置单个查询 --> <select id="getPersonById" parameterType="int" resultType="com.entity.Person"> select * from person where pid=#{pid} </select> <!-- 根据list集合查询多个 --> <select id="getPersons" resultType="com.entity.Person"> select * from person; </select> <!-- 配置添加 --> <select id="addPerson" parameterType="com.entity.Person" resultType="com.entity.Person"> insert into person(pname,page) values(#{pname},#{page}); </select> <!-- 配置删除 --> <select id="deletePersonById" parameterType="int"> delete from person where pid=#{pid} </select> <!--.配置修改 --> <select id="updatePerson" parameterType="com.entity.Person" resultType="com.entity.Person"> update person set pname=#{pname},page=#{page} where pid=#{pid}; </select></mapper>五:实现数据package com.test; import com.dao.PersonDao; import com.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 org.junit.Test; import java.util.List; public class TestMyBatis { @Test public void testSelect() throws Exception{ //读取配置文件 //获取SqlsessionFactory对象 // try { SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); //通过sessionFactory获得Sqlsession SqlSession sqlSession = sqlSessionFactory.openSession(); //添加 Person person=new Person("宏宏",18); sqlSession.insert("person.addPerson",person) ; System.out.println("添加的值:"+person); //删除 sqlSession.delete("person.deletePersonById",6); //修改 Person person1=new Person(5,"蒲蒲",6); sqlSession.update("person.updatePerson",person1); System.out.println("修改成功!"); //查询单个 Person person=sqlSession.selectOne("person.getPersonById",1); System.out.println(person); //根据list集合查询多个 List<Person> people=sqlSession.selectList("person.getPersons"); for (Person person : people) { System.out.println(person); } } catch (IOException e) { e.printStackTrace(); } } }调用Dao的增删改查:
先写dao的接口:
package com.dao; import com.entity.Person; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; public interface PersonDao { //添加 @Insert("insert into person(pname,page) values(#{pname},#{page})") public void addPerson(Person person); //删除 @Delete("delete from person where pid=#{pid}") public void deletePersonById(int pid); //修改 @Update("update person set pname=#{pname},page=#{page} where pid=#{pid}") public void updatePerson(Person person); //查询单个\ @Select("select * from person where pid = #{pid}") public Person getPersonById(int pid);//根据list集合查询多个 @Select("select * from person") public List<Person> getPersons();}然后把映射文件中的命名空间改为dao的接口(不需要在写实现类了,只要写接口方法即可)
<mapper namespace="com.dao.PersonDao">后需要得到dao的类
package com.test; 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 org.junit.Test; public class TestMyBatis { @Test public void testSelect() throws Exception{ //读取配置文件 //获取SqlsessionFactory对象 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); //通过sessionFactory获得Sqlsession SqlSession sqlSession = sqlSessionFactory.openSession();//通过dao方法进行CRUD //使用MyBatis的配置方式实现CRUD // 查询单个 PersonDao personDao=sqlSession.getMapper(PersonDao.class); Person person = personDao.getPersonById(1); System.out.println(person); //根据list集合查询多个 List<Person> list = personDao.getPersons(); for (Person person1 : list) { System.out.println(person1); } //添加 Person person2 = new Person("幸运",12); personDao.addPerson(person2); System.out.println("添加的值:"+person2); //删除 personDao.deletePersonById(6); System.out.println("删除成功!"); //修改 Person person1=new Person(4,"矮人",11); personDao.updatePerson(person1); System.out.println("修改成功"); //提交 sqlSession.commit(); //关闭 sqlSession.close();}
通过注解实现增删改查:
只需要在方法上面加上注解即可,不需要映射文件了
PersonDao:
package com.dao; import com.entity.Person; import java.util.List; public interface PersonDao { //添加 @Insert("insert into person(pname,page) values(#{pname},#{page})") public void addPerson(Person person); //删除 @Delete("delete from person where pid=#{pid}") public void deletePersonById(int pid); //修改 @Update("update person set pname=#{pname},page=#{page} where pid=#{pid}") public void updatePerson(Person person); //查询单个 @Select("select * from person where pid = #{pid}") public Person getPersonById(int pid); //根据list集合查询多个 @Select("select * from person") public List<Person> getPersons();然后在mybatis-config.xml文件中配置dao包<mappers> <!-- PersonDao注解 --> <mapper class="com.dao.PersonDao"/> </mappers> </configuration>实现:
package com.test; import com.dao.PersonDao; 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 org.junit.Test; public class TestZhuJie { //注解 @Test public void testzhujie() throws Exception{ ///读取配置文件 //获取SqlsessionFactory对象 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); //通过sessionFactory获得Sqlsession SqlSession sqlSession = sqlSessionFactory.openSession(); //通过MyBatis的注解方式实现CRUD //得到dao PersonDao personDao=sqlSession.getMapper(PersonDao.class); //查询单个 Person person = personDao.getPersonById(1); System.out.println(person); //根据list集合查询多个 List<Person> list = personDao.getPersons(); for (Person person1 : list) { System.out.println(person1); } //添加 Person person2 = new Person("晴天",15); personDao.addPerson(person2); System.out.println(person2); //删除 personDao.deletePersonById(3); System.out.println("删除成功!"); //修改 Person person1=new Person(7,"笨蛋",11); personDao.updatePerson(person1); System.out.println("修改成功"); //提交 sqlSession.commit(); //关闭 sqlSession.close(); } }