Mybatis
ORM框架与Mybatis
1.什么是框架
框架就是用Java语言编写的,将底层代码的实现过程封装成jar包,在使用中需要导入特定的jar包之后可减少代码的冗余,达到方便的效果,但是无论是什么框架,其速度都没有原生的快
2.mybatis框架
mybatis框架的底层就是jdbc,避免频繁开关和销毁数据库连接,是一个半自动框架,全自动框架:hibernate
区别:全自动:只需要自己生成数据库适合大型项目
半自动:需要自己创建表适合中小型项目
2.1mybatis框架原理
工厂模式:SqlSession 一级缓存 默认开启
SqlSessionFactory 二级缓存 默认关闭
两个xml配置文件
SqlMapConfig.xml
SqlMap.xml
RDBMS:关系型数据库管理系统
2.2ORM框架
O:Object 对象
R:Relation 关系
M:Map 映射 与数据库表字段一一对应
故ORM即为对象关系映射
3.项目结构
4.一个mybatis案例
1.新建一个动态web项目
2.完成项目架构
3.导入mybatis.jar
4.完成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>
<!-- 为了引入外部properties文件:键值对的形式 -->
<!-- 相对路径从src开始寻找 -->
<properties resource="db.properties"></properties>
<!-- 给类取别名 是一个集合 可以有多个typeAlias-->
<typeAliases>
<!-- type:类名+包名 建议直接复制限定名 -->
<typeAlias type="com.iflytek.domain.User" alias="User"/>
</typeAliases>
<!-- 配置多个环境 default:当前使用的环境 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/><!-- 事务管理 -->
<dataSource type="POOLED"> <!-- 配置数据库连接池:存放连接 对程序来说本质就是一个数据源 -->
<property name="driver" value="${driver}"/><!-- value="com.mysql.jdbc.Driver" 写法也可以-->
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/iflytek/mapper/UserInfoMapper.xml"/>
</mappers>
</configuration>
说明:
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
以上是一个约束,规定(限制)其为主配置文件,相当于声明这个文件为主配置文件
5.完成db.properties
说明:
driver:数据库驱动
url:数据库连接信息,需指明端口号和数据库名称
username:数据库用户名
password:数据库密码
6.在包domain下新建一个User实体类
记住:一定要封装实体类(get,set方法)
这里我是使用lombok来封装的
package com.iflytek.domain;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private int id;
private String username;
private String password;
@Override
public String toString() {
return "UserInfo [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}
7.完成mapper.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">
<!-- 命名空间:可以绑定类,也可以绑定接口 绑定类:id可以随便写 绑定接口:id必须跟方法名相同-->
<mapper namespace="com.iflytek.domain.User">
<!-- 返回结果集 -->
<resultMap type="User" id="UserList">
<id column="id" property="id"/><!-- id代表主键 column:表中的字段 property:实体类的属性 -->
<!-- result:普通字段 -->
<result column="username" property="username"/>
<result column="password" property="password"/>
</resultMap>
<select id="getUserInfoList" parameterType="User" resultMap="UserList">
select * from user_info
</select>
<!-- parameterType:参数类型 #:占位符 通过反射的技术实现-->
<insert id="insertNewUser" parameterType="User">
insert into user_info(username,password) value (#{username:VARCHAR},#{password:VARCHAR})
</insert>
<update id="updateUser" parameterType="User">
update user_info set username=#{username} and password=#{password} where id=#{id}
</update>
<delete id="deleteUser" parameterType="Integer">
delete from user_info where id=#{id}
</delete>
</mapper>
mapper实例:
<select id="getUserInfoList" resultMap="UserList">
select * from user_info
</select>
<!-- parameterType:参数类型 #:占位符 通过反射的技术实现-->
<insert id="insertNewUser" parameterType="User">
insert into user_info(username,password) values(#{username},#{password})
</insert>
<update id="updateUser" parameterType="User">
update user_info set username=#{username} , password=#{password} where id=#{id}
</update>
<delete id="deleteUser" parameterType="Integer">
delete from user_info where id=#{id}
</delete>
8.创建一个测试类
package com.iflytek.test;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.io.ResolverUtil.Test;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.iflytek.domain.User;
public class MybatisTest {
/* 从src开始寻找 */
private static final String PATH = "mybatis-config.xml";
/* 创建SqlSession对象 */
private SqlSession session = null;
/* 初始化 */
public void init() throws IOException {
//字符流
Reader reader = Resources.getResourceAsReader(PATH);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
session = sessionFactory.openSession();
}
public void updateUser(User user) {
int id=session.update("updateUser", user);
session.commit();
System.out.println(id);
}
public void insertNewUser(User user) {
int id= session.insert("insertNewUser", user);
session.commit();
System.out.println(id);
}
public void deleteUser(int id) {
int idx = session.delete("deleteUser", id);
session.commit();
System.out.println(id);
}
public List<User> selectAllUser(){
List<User> list=session.selectList("getUserInfoList");
return list;
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
MybatisTest test=new MybatisTest();
test.init();
/* 查询全表
* List<User> list=test.selectAllUser();
* System.out.println(list);
* */
/*插入一条数据
* User user=new User(); user.setUsername("zz"); user.setPassword("123");
* test.insertNewUser(user);
*/
/*删除一条数据
* test.deleteUser(3);
*
* */
/*指定id并更新某条数据
* User user=new User(); user.setUsername("zhang"); user.setPassword("123");
* user.setId(2);
*
* test.updateUser(user);
*/
//查询全表
List<User> list=test.selectAllUser();
System.out.println(list);
}
}
5.关于db.properties的创建
1.可以新建一个后缀为css的web组件,然后更改后缀
默认会生成在webcontent目录下面,你可以移动到src目录下面
2.可以安装properties插件