MyBatis基础——MyBatis初探——MyBatis快速学习
一、Mybatis介绍:
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。(简单的说:替代jdbc,使数据持久化)
二、Mybatis——jar包:
下载地址:http://download.csdn.net/download/eson_15/9542081
三、代码结构图及详解:
注:UserMapper.java为自定义接口
UserMapper.xml为自定义接口对应的映射文件(两个名字必须相同)
Test为测试类,WEB应用可以直接在Servlet中调用方法
User为实体类
UserService为封装的操作类,便于开发项目,调用方法
SqlFactory为工具类,读取mybatis配置文件
connection.xml为mybatis配置文件,主要写连接数据库的代码和引入映射文件的代码
四、代码展示:
4.1 SQL代码:
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; INSERT INTO `users` VALUES ('1', '张三', '27'); INSERT INTO `users` VALUES ('2', '李四', '27');
4.2 connection.xml代码:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- 配置数据库连接信息 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="scme" /> </dataSource> </environment> </environments> <mappers> <!-- 加载userMapper.xml映射文件,UserMapper.xml位于com.scme.dao这个包下,所以resource写成com/scme/dao/userMapping.xml--> <mapper resource="com/scme/dao/UserMapper.xml"/> </mappers> </configuration>
4.3 SqlFactory代码:
package com.scme.utils; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.scme.dao.UserMapper; public class SqlFactory { private static SqlSessionFactory sqlSessionFactory; static{ //mybatis的配置文件的名字 String fileName="connection.xml"; //使用输入流读取mybatis的配置文件(它也加载关联的映射文件) InputStream inputStream; try { inputStream = Resources.getResourceAsStream(fileName); sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //返回sqlSessionFactory对象 public static SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory; } }
4.4 UserMapper.java代码:
package com.scme.dao; import java.util.List; import com.scme.pojo.User; public interface UserMapper { //根据id查询 public List<User> queryById(int id); }
4.5 UserMapper.xml代码:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 例如namespace="com.scme.dao.userMapper"就是com.scme.dao(包名)+userMapper(userMapper.xml文件去除后缀) --> <mapper namespace="com.scme.dao.UserMapper"> <!--根据id查询得到一个user对象--> <select id="queryById" resultType="com.scme.pojo.User" parameterType="int"> select * from users where id=#{id} </select> <!--注: 在select标签中编写'查询'的SQL语句,同理插入为'insert标签',修改为'update标签','删除未delete标签', 设置select标签的id属性为queryById,id属性值必须是唯一的,不能够重复,后面会利用id匹配查询方法 使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型 resultType="com.scme.pojo.User"就表示将查询结果封装成一个User类的对象返回 User类就是users表所对应的实体类--> </mapper>
4.6 UserService代码:
package com.scme.service; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import com.scme.dao.UserMapper; import com.scme.pojo.User; import com.scme.utils.SqlFactory; public class UserService { //获取SqlSessionFactory对象 private SqlSessionFactory sqlSessionFactory; public UserService() { sqlSessionFactory=SqlFactory.getSqlSessionFactory(); } //封装queryByID方法 public List<User> queryByID(int id){ //创建能执行映射文件中sql的sqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //获取定义查询方法的接口 UserMapper userDao=sqlSession.getMapper(UserMapper.class); //调用根据id查询方法 //虽然在userMapping.xml里面,resultType="com.scme.pojo.User",即返回值类型为User对象,但这里可以用list泛型集合接收 List<User> list=userDao.queryById(id); sqlSession.close(); return list; } }
4.7 User代码:
package com.scme.pojo; public class User { //实体类的属性和表的字段名称一一对应 private int id; private String name; private int age; 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
4.8 Test代码:
package com.scme.lunch; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import com.scme.pojo.User; import com.scme.service.UserService; import com.scme.utils.SqlFactory; public class Test { public static void main(String[] args) { UserService service=new UserService(); List<User> list=service.queryByID(1); System.out.println(list.get(0)); } }
五、效果展示:
如有帮助,请关注!