MyBatis框架中通过映射文件或实现增删改查操作
开发工具: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="123"/> <!--数据库密码--> </dataSource> </environment> </environments> <mappers> <mapper resource="com/entity/User.xml"/> <!--加载映射文件--> </mappers> </configuration>
三:写实体类
User
package com.entity; public class User { private int uid; private String uname; private String upass; public User() { } public User(String uname, String upass) { this.uname = uname; this.upass = upass; } public User(int uid, String uname, String upass) { this.uid = uid; this.uname = uname; this.upass = upass; } public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpass() { return upass; } public void setUpass(String upass) { this.upass = upass; } @Override public String toString() { return "User{" + "uid=" + uid + ", uname='" + uname + '\'' + ", upwd='" + upass + '\'' + '}'; } }
四:在映射文件中实现增删改查操作
(映射文件要是写在java的目录下的话它不会自动检测xml配置文件,想要检测到映射xml文件的话有两种解决办法:
一:直接把映射文件写在resource的目录下
二:在pom.xml文件中让配置它自动检测你的xml文件,需要写在</build>前面
<!--加载能够读取到映射文件--> <resources> <resource> <directory>src/main/java</directory> <includes> <include> **/*.xml </include> </includes> </resource> </resources>)
User.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="user"> <!--查询单个对象--> <select id="getUserById" parameterType="int" resultType="com.entity.User"> select * from user where uid=#{uid}; </select> <!--查询集合--> <select id="getAllUsers" resultType="com.entity.User"> select * from user; </select> <!--添加数据 可以用insert标签--> <select id="addUser" parameterType="com.entity.User" resultType="com.entity.User"> insert into user(uname,upass) values(#{uname},#{upass}); </select>
<!--删除数据 可以用delete标签--> <select id="deleteUser" parameterType="int"> delete from user where uid=#{uid}; </select> <!--修改数据 可以用update标签--> <select id="updateUser" parameterType="com.entity.User" resultType="com.entity.User"> update user set uname=#{uname},upass=#{upass} where uid=#{uid}; </select> </mapper>
五:实现数据
package com.test; import com.dao.IUserDaos; import com.entity.User; 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.io.InputStream; import java.util.List; public class TestMyBatis { @Test public void testMy() throws Exception{ //加载配置文件 //得到SQLSessionFactory(MyBatis中) String resource="mybatis-config.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //得到SqlSession SqlSession sqlSession=sqlSessionFactory.openSession(); //单个 User user=sqlSession.selectOne("user.getUserById",4); System.out.println("测试单个"+user); //测试集合 List<User> list=sqlSession.selectList("user.getAllUsers"); for (User user1 : list) { System.out.println("测试集合"+user1); } // 测试添加 User users=new User("aaa","1234"); sqlSession.insert("user.addUser",users) ; System.out.println("添加的值:"+users); // 测试删除 sqlSession.delete("user.deleteUser",39); System.out.println("删除成功!"); //测试修改 User user1=new User(4,"咦咦咦","3456"); sqlSession.update("user.updateUser",user1); System.out.println("修改成功!"); sqlSession.commit(); sqlSession.close(); } }
调用Dao的增删改查:
先写dao的接口:
package com.dao; import com.entity.User; import org.apache.ibatis.annotations.*; import java.util.List; public interface IUserDaos { //查询单个 public User getUserById(int uid); //查询所有 public List<User> getAllUsers(); //添加 public void addUser(User user); //删除 public int deleteUser(int uid); //修改 public void updateUser(User user); }
然后把映射文件中的命名空间改为dao的接口(不需要在写实现类了,只要写接口方法即可)
然后需要得到dao的类
package com.test; import com.dao.IUserDaos; import com.entity.User; 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.io.InputStream; import java.util.List; public class TestMyBatis { @Test public void testMy() throws Exception{ //加载配置文件 //得到SQLSessionFactory String resource="mybatis-config.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //得到SqlSession SqlSession sqlSession=sqlSessionFactory.openSession(); //通过dao方法进行CRUD IUserDaos iUserDaos= sqlSession.getMapper(IUserDaos.class); User user=iUserDaos.getUserById(26); System.out.println(user); List<User> list=iUserDaos.getAllUsers(); for (User user1 : list) { System.out.println(user1); } User user2= new User("bbb","345678"); iUserDaos.addUser(user2); System.out.println("添加的值:"+user2); iUserDaos.deleteUser(4); System.out.println("删除成功!"); User user1=new User(33,"小明","3456"); iUserDaos.updateUser(user1); System.out.println("修改成功!"); sqlSession.commit(); sqlSession.close(); } }
通过注解实现增删改查:
只需要在方法上面加上注解即可,不需要映射文件了
IUserDaos:
//查询单个 @Select("SELECT * FROM user WHERE uid = #{id}") public User getUserById(int uid); //查询所有 @Select("SELECT * FROM user") public List<User> getAllUsers(); //添加 @Insert("INSERT INTO user(uname,upass) VALUES(#{uname},#{upass})") public void addUser(User user); //删除 @Delete("DELETE FROM user WHERE uid=#{uid}") public int deleteUser(int uid); //修改 @Update("UPDATE user SET uname=#{uname},upass=#{upass} WHERE uid=#{uid}") public void updateUser(User user);
然后在mybatis-config.xml文件中配置dao包
实现:
package com.test; import com.dao.IUserDaos; import com.entity.User; 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.io.InputStream; import java.util.List; public class Testself_study { //注解 @Test public void testselfstudy() throws Exception{ //加载配置文件 //得到SQLSessionFactory String resource="mybatis-config.xml"; InputStream inputStream= Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); //得到SqlSession SqlSession sqlSession=sqlSessionFactory.openSession(); IUserDaos iUserDaos=sqlSession.getMapper(IUserDaos.class); //注解得到单个 User user=iUserDaos.getUserById(26); System.out.println("单个:"+user); //注解得到所有 List<User> list= iUserDaos.getAllUsers(); for (User user1 : list) { System.out.println("得到所有:"+user1); } //添加 User user2=new User("my","34567"); iUserDaos.addUser(user2); System.out.println("添加成功:"+user2); //删除 int id=iUserDaos.deleteUser(25); System.out.println("删除:"+id); //修改 User user3=new User(37,"修改","6666"); iUserDaos.updateUser(user3); System.out.println("修改:"+user3); sqlSession.commit(); sqlSession.close(); } }
源码:点击打开链接