2020-12-29

mybatis实现MySQL数据库的增删改查

环境:

  • jdk1.8
  • mysql5.7
  • maven3.6.0
  • IDEA

什么是mybatis框架?

  • MyBatis 是一款优秀的持久层框架,
  • 它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  • MyBatis可以通过简单的
  • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了[google code](https://baike.baidu.com/item/google code/2346604),并且改名为MyBatis 。2013年11月迁移到Github。

下面开始搭建

  1. sql文件如下:
/*SQLyog Ultimate v13.1.1 (64 bit)MySQL - 5.7.31-log : Database - mybatis**********************************************************************/CREATE DATABASE /*!32312 IF NOT EXISTS*/`mybatis` /*!40100 DEFAULT CHARACTER SET latin1 */;USE `mybatis`;/*Table structure for table `user` */DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` int(20) NOT NULL, `name` varchar(30) DEFAULT NULL, `pwd` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `user` */insert into `user`(`id`,`name`,`pwd`) values (1,'qijian','123'),(2,'Tom','123'),(3,'qijian','111');
  1. 使用 Maven 来构建项目。pom.
<?
<?

注意:

  1. 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从

MybatisUtils工具类.

package com.qijian.utils;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 java.io.IOException;import java.io.InputStream;public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; private static String resource = "mybatis-Config.
  1. 实体类user如下
package com.qijian.pojo;public class User { private int id; private String name; private String pwd; @Override public String toString() {  return "User{" +    "id=" + id +    ", name='" + name + '\'' +    ", pwd='" + pwd + '\'' +    '}'; } public User(int id, String name, String pwd) {  this.id = id;  this.name = name;  this.pwd = pwd; } 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 getPwd() {  return pwd; } public void setPwd(String pwd) {  this.pwd = pwd; }}
  1. UserMapper类
package com.qijian.dao;import com.qijian.pojo.User;import java.util.List;import java.util.Map;public interface UserMapper { //查询所有的用户 //@Select("SELECT * FROM mybatis.user WHERE id = #{id}") List<User> getUserList(); //通过id查询用户 User getUserById(int id); //增加用户 int addUser(User user); //添加用户 使用Map集合 int addUserByMap(Map<String,Object> map); //修改用户 int updateUser(User user); //删除用户 void deleteUser(int id);}
  1. 基于
<?

注意:
对命名空间的一点补充
在之前版本的 MyBatis 中,命名空间(Namespaces)的作用并不大,是可选的。 但现在,随着命名空间越发重要,你必须指定命名空间。
命名空间的作用有两个,一个是利用更长的全限定名来将不同的语句隔离开来,同时也实现了你上面见到的接口绑定。就算你觉得暂时用不到接口绑定,你也应该遵循这里的规定,以防哪天你改变了主意。 长远来看,只要将命名空间置于合适的 Java 包命名空间之中,你的代码会变得更加整洁,也有利于你更方便地使用 MyBatis。
命名解析:为了减少输入量,MyBatis 对所有具有名称的配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则。
全限定名(比如 "com.mypackage.MyMapper.selectAllThings)将被直接用于查找及使用。
短名称(比如 "selectAllThings")如果全局唯一也可以作为一个单独的引用。 如果不唯一,有两个或两个以上的相同名称(比如 "com.foo.selectAllThings" 和 "com.bar.selectAllThings"),那么使用时就会产生"短名称不唯一"的错误,这种情况下就必须使用全限定名。
8. 测试类

package com.qijian.dao;import com.qijian.pojo.User;import com.qijian.utils.MybatisUtils;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import java.io.IOException;import java.util.HashMap;import java.util.List;import java.util.Map;public class UserMapperTest { @Test public void testSelect() throws IOException {  //第一步:获取sqlsesion对象  SqlSession sqlSession = MybatisUtils.getSqlSession();  //执行  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  List<User> userList = userMapper.getUserList();  for(User user : userList){   System.out.println(user);  }  //关闭资源  sqlSession.close(); } @Test public void testSelectById() throws IOException {  //获取sqlSession对象  SqlSession sqlSession = MybatisUtils.getSqlSession();  //执行  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  User user = userMapper.getUserById(1);  System.out.println(user);  sqlSession.close(); }// 注意增删改差需要提交事务 @Test public void testAddUser() throws IOException {  SqlSession sqlSession = MybatisUtils.getSqlSession();  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  int res = userMapper.addUser(new User(7,"herry","123"));  if (res>0){   System.out.println("插入成功!");  }  //提交事务  sqlSession.commit();  sqlSession.close(); } @Test public void testUpdateUser() throws IOException {  SqlSession sqlSession = MybatisUtils.getSqlSession();  sqlSession.getMapper(UserMapper.class).updateUser(new User(3,"qijian","111"));  sqlSession.commit();  sqlSession.close(); } @Test public void testDeleteUser() throws IOException {  SqlSession sqlSession = MybatisUtils.getSqlSession();  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  userMapper.deleteUser(7);  sqlSession.commit();  sqlSession.close(); } @Test public void testAddByMap() throws IOException {  SqlSession sqlSession = MybatisUtils.getSqlSession();  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);  //空过Map可以很方便的插入数据  // 假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当使用Map  Map<String,Object> map = new HashMap<String, Object>();  map.put("id",8);  map.put("name","wangwu");  map.put("pwd","1234");  userMapper.addUserByMap(map);  sqlSession.commit();  sqlSession.close(); }// Map中传递参数,直接在SQL中取出key// 对象传递参数,直接在SQL中取对象的属性// 只有一个基本类型参数的情况下,可以直接在SQL中取到// 多参数用Map}

在该项目的搭建中遇到的问题如下:

  • mybatis 出错java.lang.ExceptionInInitializerError
  • mybatis 出现org.apache.ibatis.exceptions.PersistenceException: ### Error querying database.异常
  • mybatis maven资源导出失败的问题








原文转载:http://www.shaoqun.com/a/504397.html

跨境电商:https://www.ikjzd.com/

ifttt:https://www.ikjzd.com/w/956

acedota:https://www.ikjzd.com/w/2070


环境:jdk1.8mysql5.7maven3.6.0IDEA什么是mybatis框架?MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移
小马哥:小马哥
vat:vat
美女如云 中国十大美女城市(全文):美女如云 中国十大美女城市(全文)
广州怎样去花都九龙湖呢?九龙湖有什么好玩的?:广州怎样去花都九龙湖呢?九龙湖有什么好玩的?
增加亚马逊产品listing流量的小秘密 !:增加亚马逊产品listing流量的小秘密 !

No comments:

Post a Comment