环境:
- 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。
下面开始搭建
- 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');
- 使用 Maven 来构建项目。pom.
<?
<?
注意:
- 每个基于 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.
- 实体类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; }}
- 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);}
- 基于
<?
注意:
对命名空间的一点补充
在之前版本的 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
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流量的小秘密 !
没有评论:
发表评论