MyBatis简介以及入门参见以下文章
MyBatis简介及入门
1、新建一个数据库,以及一张表user
CREATE TABLE `user` ( `user_id` int(10) NOT NULL COMMENT '用户名ID', `user_name` varchar(100) DEFAULT NULL COMMENT '用户名', `email` varchar(80) DEFAULT NULL COMMENT '用户邮箱', `age` int(5) DEFAULT NULL COMMENT '年龄', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、创建maven的普通Java工程,加入maven的mybatis坐标,mysql驱动坐标
其中,pom.xml文件如下
4.0.0 com.mycompany mybatis-1 1.0.0 UTF-8 1.8 1.8 junit junit 4.11 test org.mybatis mybatis 3.5.1 mysql mysql-connector-java 5.1.9 src/main/java **/*.properties **/*.xml false
3、创建Java实体类User--保存表中的一行数据
package com.mycompany.domain; public class User { private int userId; private String userName; private String email; private int age; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
4、创建持久层的dao接口,定义操作数据库的方法
package com.mycompany.dao; import com.mycompany.domain.User; import java.util.List; public interface UserDao { /** * 查询user列表 * @param user 单个user用户 * @return user的list */ ListselectUserList(User user); /** * 插入user * @param user * @return */ int insertUser(User user); }
5、创建一个mybatis使用的配置文件 SQL映射文件
编写SQL语句,一般一个表对应一个SQL映射文件,这个文件就是xml文件
sql映射文件(sql mapper):编写SQL语句,mybatis负责执行这些SQL语句
insert into user values(#{userId},#{userName},#{email},#{age})
6、创建mybatis的主配置文件 ,一个项目一个主配置文件
主配置文件提供了数据库的连接信息和SQL映射文件的位置信息
将SqlSession提取为工具类MyBatisUtil
public class MyBatisUtil { public MyBatisUtil() { } public static SqlSession getSqlSession() throws IOException { String config = "mybatis-config.xml"; InputStream ins = Resources.getResourceAsStream(config); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(ins); SqlSession sqlSession = factory.openSession(); return sqlSession; } }
MyBatis传统Dao方式以及Dao动态代理
创建user表以及maven的Java普通工程,Java实体类,dao持久层接口,SQL映射文件以及主配置文件如上步骤
MyBatis传统Dao方式
7、创建类实现UserDao接口
public class UserDaoImpl implements UserDao { /** * 查询user列表 * @param user 单个user用户 * @return user的list */ @Override public ListselectUserList(User user) { List userList = null; try { //获取SqlSession对象 SqlSession sqlSession = MyBatisUtil.getSqlSession(); String sqlId = "com.mycompany.dao.UserDao.selectUserList"; userList = sqlSession.selectList(sqlId); //关闭 sqlSession.close(); } catch (IOException e) { e.printStackTrace(); } return userList; } @Override public int insertUser(User user) { int nums = 0; try { SqlSession sqlSession = MyBatisUtil.getSqlSession(); String sqlId = "com.mycompany.dao.UserDao.insertUser"; nums = sqlSession.insert(sqlId,user); //mybatis默认不是自动提交事务的, 所以在insert ,update ,delete后要手工提交事务 sqlSession.commit(); //关闭 sqlSession.close(); } catch (IOException e) { e.printStackTrace(); } return nums; } }
8、创建测试类
public class TestMyBatis { @Test public void testSelectUsers(){ /** * ListuserList = userDao.selectUserList(null); 调用 * 1、dao对象,UserDao,全限定名称是:com.mycompany.dao.UserDao * 全限定名称 和 namespace 是一样的 * * 2、方法名称, selectUserList * 这个方法就是 mapper文件中的 id值 selectUserList * * 3、通过dao中方法的返回值也可以确定MyBatis要调用的SqlSession的方法 * 如果返回值是List ,调用的是SqlSession.selectList()方法 * 如果返回值 int ,或是非List的, 看mapper文件中的 标签是 , 就会 调用 * SqlSession的insert, update等方法 * * mybatis的动态代理: * mybatis根据 dao的方法调用,获取执行sql语句的信息 * mybatis根据你的dao接口,创建出一个dao接口的实现类, 并创建这个类的对象 * 完成SqlSession调用方法, 访问数据库 */ UserDaoImpl userDao = new UserDaoImpl(); List userList = userDao.selectUserList(null); for (User user:userList){ System.out.println("查询到的用户="+user); } } @Test public void testInsertUser(){ UserDaoImpl userDao = new UserDaoImpl(); User user = new User(); user.setUserId(6); user.setUserName("zhaoyunchang"); user.setEmail("[email protected]"); user.setAge(18); int nums = userDao.insertUser(user); System.out.println("添加对象的数量:"+nums); } }
MyBatis之Dao动态代理
使用mybatis的动态代理机制, 使用SqlSession.getMapper(dao接口)
getMapper能获取dao接口对于的实现类对象
public class TestMyBatis { @Test public void testSelectUsers(){ try { /** * 使用mybatis的动态代理机制, 使用SqlSession.getMapper(dao接口) * getMapper能获取dao接口对于的实现类对象 */ SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); //com.sun.proxy.$Proxy2 : jdk的动态代理 System.out.println("userDao="+userDao.getClass().getName()); //调用dao的方法, 执行数据库的操作 ListuserList = userDao.selectUserList(null); for(User user: userList){ System.out.println("用户="+user); } } catch (IOException e) { e.printStackTrace(); } } @Test public void testInsertUser(){ try { /** * 使用mybatis的动态代理机制, 使用SqlSession.getMapper(dao接口) * getMapper能获取dao接口对于的实现类对象 */ SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); //com.sun.proxy.$Proxy2 : jdk的动态代理 System.out.println("userDao="+userDao.getClass().getName()); //调用dao的方法, 执行数据库的操作 User user = new User(); user.setUserId(7); user.setUserName("zhugeliang"); user.setEmail("[email protected]"); user.setAge(18); int nums = userDao.insertUser(user); sqlSession.commit(); System.out.println("添加对象的数量:"+nums); } catch (IOException e) { e.printStackTrace(); } } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。