
本文共 7702 字,大约阅读时间需要 25 分钟。
1.Mybatis 介绍
Mybatis是支持普通sql查询,存储过程和高级映射的持久层框架。它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低。
JDBC->dbutils->MyBatis->Hibernate
Hibernate为全自动框架
2. mybatis 快速入门
第一:添加jar包
mysql,mybatis,lombok
注意:lombok:(必须安装idea的lombok插件,可以生成实体类的get、set、有参、无参构造)
mysql mysql-connector-java 5.1.40 org.mybatis mybatis 3.5.6 org.projectlombok lombok 1.18.18
第二:创建数据库以及表
便于mybatis-config.xml的配置
第三:添加Mybatis的配置文件mybatis-config.xml
第四:定义表所对应的实体类
//以下注解是Lombok中的注解@Data (包括get、set、toString)@AllArgsConstructor@NoArgsConstructorpublic class User { private int id; private String username; private String password;}
第五:定义操作user表的CURD(增删改查)操作
sql映射文件UserMapper.xml
注意:
resultType: 查询语句执行完后 返回的数据类型,int 类型可以省略,其他类型不能不写。
parameterType:表示传来参数的类型,该属性可以不要加
namespace:命名空间,给当前存放mybatis的容器起一个唯一的名字,必须和接口的全路径匹配
select:表示查询标签:该标签内可以放置查询的sql语句
id:唯一标志,名字必须要跟接口名字一样;
insert into user(username,password) values (#{param1},#{param2}) update user set username=#{username},password=#{password} where id=#{id} delete from user where id=#{id}
第六:在 conf.xml 文件中注册 userMapper.xml 文件
注意:
- mappers这个标签要放到<configuration></configuration>里面
- resource="mapper路径" 例如:resource="mapper\UserMapper.xml"
第七:编写测试代码:
注意:JDBC事务管理默认开启事务,增删改在执行完操作,需要提交事务 例如:session.commit();
普通的增删改查
例如:haha.selectById
haha:namespace=" haha",mapper.xml命名空间的名字
selectById: id="selectById"
- 查询
注意:selectOne 表示只查询一个
selectList() 表示查询为list集合类型.
public static void main(String[] args) throws Exception {// 查询//加载 mybatis 的配置文件(它也加载关联的映射文件) Reader reader = Resources.getResourceAsReader("mybatis-config.xml");//构建 sqlSession 的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);//创建能执行映射文件中 sql 的 sqlSession SqlSession session = sessionFactory.openSession();// 执行sql haha:命名空间的名字 User user = session.selectOne("haha.selectById", 2); System.out.println(user); }
2、添加
insert表示添加的方法
// 添加 @Test public void insert() throws Exception {// 1.读取mybatis-config.xml Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 2.读取sqlSessionFaction SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);// 3.获取sqlSession对象 SqlSession session = sessionFactory.openSession();// 4.执行sql int insert = session.insert("haha.insertUser", new User("峥峥", "111"));// 增删改需要提交事务 session.commit(); System.out.println(insert); }
3、修改
update表示修改的方法
//修改 @Test public void update() throws Exception {//添加mybatis-config.xml Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 获取sqlSessionFactory SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);// 读取sqlSession对象 SqlSession session = sessionFactory.openSession(); int update = session.update("haha.updateUser", new User(3, "李四", "333"));//执行sql session.commit(); System.out.println(update); }
4、删除
delete表示删除的方法
// 删除 @Test public void delete() throws Exception{// 1. 添加mybatis-config.xml Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 2 获取·sqlSessionFactory SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);// 3 读取sqlSession对象 执行sql语句 SqlSession session = sessionFactory.openSession();// 4.执行sql int delete = session.delete("haha.deleteUser", 2);// 5 提交事务 session.commit(); System.out.println(delete); }
实际开发中的操作:
注:实际开发中接口要结合映射文件一起用
1、创建的接口userDao
public interface UserDao { /** * 查询所有的用户信息 * @return返回所有的用户信息 */ ListselectAll();/** * 添加用户信息 */ int insertUser(String username,String password); /** * 修改用户信息 */ int updateUser(User user); /** * 删除用户信息 */ int deleteUser(int id);}
2、创建映射的文件
insert into user(username,password) values (#{param1},#{param2}) update user set username=#{username},password=#{password} where id=#{id} delete from user where id=#{id}
3、实际开发中的增删改操作
- 执行定义的 select 语句
/** * 查询全部 * @throws Exception */ @Test public void select()throws Exception{// 先读取mybatis-config.xml Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 获取sqlSessionFactory SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);// 读取sqlSession对象 SqlSession session = sessionFactory.openSession();// 得到对应接口的实现类 UserDao mapper = session.getMapper(UserDao.class); Listusers = mapper.selectAll();// 提交事务 session.commit(); System.out.println(users); }
- 执行定义的 insert语句
// 添加用户 public static void main(String[] args) throws Exception{// 1.先获取mybatis-config.xml Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 2.获取sqlSessionFactory SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);// 3 读取sqlSession对象 执行sql语句 SqlSession session = sessionFactory.openSession();// 4.执行sql UserDao userDao = session.getMapper(UserDao.class);//获得对应接口的实现类 int i = userDao.insertUser("峥11", "11111"); session.commit(); System.out.println(i); }
- 执行定义的 update语句
/** * 修改 * @throws Exception */ @Test public void update() throws Exception{// 先读取mybatis-config.xml Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 获取sqlsessionFactory SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);// 读取sqlSessiom对象 SqlSession session = sessionFactory.openSession();// 得到对应的实现类 UserDao userDao = session.getMapper(UserDao.class); int i = userDao.updateUser(new User(4, "哈哈哈", "222"));// 提交事务 session.commit(); System.out.println(i); }
- 执行定义的 delete语句
/** * 删除 * @throws Exception */ @Test public void delete() throws Exception{// 读取mybatis-config.xml Reader reader = Resources.getResourceAsReader("mybatis-config.xml");// 获取sqlSessionFaction SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);// 获取到sqlSession对象 SqlSession session = sessionFactory.openSession();// 获取到接口对应的实现类 UserDao mapper = session.getMapper(UserDao.class); int i = mapper.deleteUser(5); session.commit(); System.out.println(i); }
注意事项
mapper.xml映射中传到dao层可能出现不匹配的现象
第一种:
UserDao中加入@param表示把该参数的名称作为映射文件的参数名
UserMapper.xml中: mapper.xml映射中
第二种:
UserMapper.xml中: mapper.xml映射中
UserDao中 dao层
发表评论
最新留言
关于作者
