【参考文档】
mybatis官网 http://www.mybatis.org/mybatis-3/zh/index.html 教程 https://www.yiibai.com/mybatis/mybatis-curd.html 【Maven工程】 【添加依赖】 mybatis.xx.jar mysql-connector-java.xx.jar 手动改下版本号,再从maven依赖网站下载对应jar,放到本地 【查询demon】 新增resources/config目录 Configure.xml 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。后面的测试类会读取Configure.xml,构建SqlSessionFactory,获取session。url中的&为了满足格式要求,具体是时区和SSL配置。通过读取User.xml配置mapper。User.xml
UserMapper命名空间,测试类会调用,likailun.Mybatis.User对应结果集。User.java
package likailun.Mybatis;public class User { private int id; private String name; private String dept; private String phone; private String website; public String getWebsite() { return website; } public void setWebsite(String website) { this.website = website; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDept() { return dept; } public void setDept(String dept) { this.dept = dept; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
UserTest.java
首先读取Configure.xml,通过SqlSessionFactoryBuilder构建sqlSessionFactory,读取对应mapper方法,进行查询。package likailun.Mybatis;import java.io.Reader;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class UserTest { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; static { try { reader = Resources.getResourceAsReader("config/Configure.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { SqlSession session = sqlSessionFactory.openSession(); try { User user = (User) session.selectOne("UserMapper.GetUserByID", 1); if (user != null) { System.out.println(user); } } catch (Exception e) { System.out.println(e); } finally { session.close(); } }}
运行UserTest
【注解方式】
换用注解方式,之前mapper是通过Configure.xml添加,User.xml配置的。新增加UserTest1.java UserMapper.java Configure1.xmlConfigure1.xml注释掉了UserMapper
UserMapper.java 增加注解方法
import org.apache.ibatis.annotations.*;public interface UserMapper { @Select("select * from user where id = #{id}") User getUserByID(int id);}
UserTest1.java
sqlSessionFactory增加mapper改用sqlSessionFactory.getConfiguration().addMapper(UserMapper.class);
调用mapper则用
UserMapper mapper = session.getMapper(UserMapper.class);User user = mapper.getUserByID(1);
public class UserTest1 { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; static { try { reader = Resources.getResourceAsReader("config/Configure1.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); sqlSessionFactory.getConfiguration().addMapper(UserMapper.class); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { SqlSession session = sqlSessionFactory.openSession(); try { UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.getUserByID(1); if (user != null) { System.out.println(user); } } catch (Exception e) { System.out.println(e); } finally { session.close(); } }}
【实际应用】
实际应用时,UserMapper中主要写接口,User.xml主要写语句,且保证namespace和UserMapper相同,mybatis才能找到。 Configure2.xml中com.mysql.cj.jdbc.Driver时6之后新驱动User2.xml中likailun.Mybatis.UserMapper2和UserMapper2.java的路径相同,之后可以试下不相同时,报错信息。
UserMapper2.java注解去掉
public interface UserMapper2 { User getUserByID(int id);}
UserTest2.java中,原先addMapper部分不需要,因为配置文件已经添加,后面仍调用mapper方法。
public class UserTest2 { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; static { try { reader = Resources.getResourceAsReader("config/Configure2.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { SqlSession session = sqlSessionFactory.openSession(); try { UserMapper2 mapper = session.getMapper(UserMapper2.class); User user = mapper.getUserByID(1); if (user != null) { System.out.println(user); } } catch (Exception e) { System.out.println(e); } finally { session.close(); } }}
【增删改查CURD】
UserMapper.java
public interface UserMapper { public User getUserByID(int id); public ListgetUserList(); public void insertUser(User user); public void updateUser(User user); public void deleteUser(int id);}
Configure.xml
User.xml
insert into user(name, dept, website,phone) values(#{name}, #{dept}, #{website}, #{phone}) update user set name = #{name}, dept = #{dept}, website = #{website}, phone = #{phone} where id = #{id} delete from user where id = #{id}
UserTest.java
public class UserTest { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; static { try { reader = Resources.getResourceAsReader("config/Configure.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { deleteUser(); } public static void insertUser() { try { SqlSession session = sqlSessionFactory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = new User(); user.setName("Google"); user.setDept("Tech"); user.setWebsite("http://www.google.com"); user.setPhone("120"); mapper.insertUser(user); session.commit(); } catch (Exception e) { e.printStackTrace(); } } public static void deleteUser() { try { SqlSession session = sqlSessionFactory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); printUsers(mapper.getUserList()); mapper.deleteUser(2); session.commit(); printUsers(mapper.getUserList()); }catch (Exception e) { e.printStackTrace(); } } public static void updateUser() { try { SqlSession session = sqlSessionFactory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); printUsers(mapper.getUserList()); User user = mapper.getUserByID(1); user.setName("New name"); mapper.updateUser(user); session.commit(); printUsers(mapper.getUserList()); }catch (Exception e) { e.printStackTrace(); } } public static void getUserList() { try { SqlSession session = sqlSessionFactory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); printUsers(mapper.getUserList()); } catch (Exception e) { e.printStackTrace(); } } private static void printUsers(final Listusers) { for (User user : users) { System.out.println(user.getId() + user.getName() + user.getDept() + user.getWebsite()); } } }
配置文件中parameterType和resultType的说明:parameterType不填接口正常,resultType得填
insert into user(name, dept, website,phone) values(#{name}, #{dept}, #{website}, #{phone}) update user set name = #{name}, dept = #{dept}, website = #{website}, phone = #{phone} where id = #{id} delete from user where id = #{id}
【多表查询】
association单个collection多个 association Configure.xml添加mapperPost.xml
Post.java
public class Post{ private int postid; private int userid; private String title; private String content; private Date created; private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public int getPostid() { return postid; } public void setPostid(int postid) { this.postid = postid; } public int getUserid() { return userid; } public void setUserid(int userid) { this.userid = userid; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Date getCreated() { return created; } public void setCreated(Date created) { this.created = created; } }
PostMapper.java
public interface PostMapper { public Post getPostByID(int id);}
Test.java
public static void main(String[] args) { SqlSession session = sqlSessionFactory.openSession(); PostMapper mapper = session.getMapper(PostMapper.class); Post post = mapper.getPostByID(1); System.out.println(post.getUser().getName()); }
collection
User.xmlTest.java
public static void main(String[] args) { SqlSession session = sqlSessionFactory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.getUserByID(1); System.out.println(user.getPosts().get(0).getTitle()); }