ssm框架逻辑删除mysql_SSM框架(一):Mybatis笔记

Mybatis简介

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

Mybatis可以简化JDBC操作,实现数据的持久化。

ORM:object relational mapping,是一个概念。实现了对象关系的映射,把Java类和数据表建立连接,一一对应。

Mybatis是ORM的一个实现。ORM可以使得开发人员像操作对象一样,操作数据库表。

项目实现

Mybatis项目准备

1、jar包:数据库.jar 和 Mybatis.jar

2、总配置文件 mybatis-config.xml

主要功能:配置和连接数据库主要信息;指定mapper文件。

Java连接oracle

String driver = "oracle.jdbc.driver.OracleDriver"; //驱动

String url = "jdbc:oracle:thin:@//localhost:1521/orcl"; //连接字符串

String username = "scott"; //用户名

String password = "123456"; //密码

Java连接mysql

String driver = "com. mysql.jdbc.Driver"; //驱动

String url = "jdbc:mysql://localhost:3306/数据库名"; //连接字符串

String username = "root"; //用户名

String password = "root"; //密码

3、Mapper文件

一个Dao对应一个Mapper文件,对应一个表,写数据库的sql语句。(一个×××Mapper.xml 对应一个×××dao.java)

4、Mybatis最基础的执行顺序:

首先加载mybatis-config.xml总配置文件,根据development的参数配置连接数据库;查询mappers映射关系,找到mapper.xml配置文件

执行mapper.xml文件,该文件记录了运行SQL;准备id的名字等待被调用

TestMain 生成SqlSessionFactory工厂对象

由工厂对象生成SqlSession,然后打开连接数据库连接通道

对应调用mapper.xml文件中的id,执行mapper.xml中SQL语句

关闭SqlSession

SqlSessionFactory

SqlSessionFactory是MyBatis的关键对象,它是个单个数据库映射关系经过编译后的内存镜像.SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象类获得,而SqlSessionFactoryBuilder则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例.每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心.同时SqlSessionFactory也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在.在应用运行期间不要重复创建多次,建议使用单例模式.SqlSessionFactory创建SqlSession的工厂。

整个MyBatis运行期间的核心工厂,大部分类都由它生产制造。

SqlSession

SqlSession是MyBatis的关键对象,是执行持久化操作的独享,类似于JDBC中的Connection.它是应用程序与持久层之间执行交互操作的一个单线程对象,也是MyBatis执行持久化操作的关键对象.SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用SqlSession实例来直接执行被映射的SQL语句.每个线程都应该有它自己的SqlSession实例.SqlSession的实例不能被共享,同时SqlSession也是线程不安全的,绝对不能将SqlSeesion实例的引用放在一个类的静态字段甚至是实例字段中.也绝不能将SqlSession实例的引用放在任何类型的管理范围中,比如Servlet当中的HttpSession对象中.使用完SqlSeesion之后关闭Session很重要,应该确保使用finally块来关闭它.

一次请求数据的连接,类似于JDBC中的Connection

项目实例

Mybatis实现一个简单的用户登录

1、导入 jdbc6.jar 和 mybatis-3.2.6.jar。

2、mybatis-config.xml

/p>

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

3、根据dao层ClientDao.java 创建ClientMapper.xml

/p>

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

select * from client where cli_name=#{cliName} and cli_password=#{cliPassword}

注意事项:所有的标签等,都必须有sql语句,但是sql参数值可选。

4、Dao层接口引入

注意:方法名要和mapper里的id保持一致,参数数量和类型保持一致,并使用注解@param("参数名")对应mapper的参数名

public interface ClientDao {

public List selectUser(@Param("cliName")String cliName, @Param("cliPassword")String cliPassword);

}

5、service层引入

根据上面Mybatis的执行顺序可以发现,每次执行代码都需要调用SqlSession工厂,再连接数据库,最后执行方法关闭连接。

所以引入一个MyBatis工具类

public class MyBatisUtil {

private static SqlSessionFactory factory;

//保证service层 进行多次dao操作,公用一个SqlSession对象

private static ThreadLocal tl = new ThreadLocal();

static{

try {

String resouce = "mybatis-config.xml"; //代表总配置文件的路径

InputStream is = Resources.getResourceAsStream(resouce);//使用输入流读取配置文件

factory = new SqlSessionFactoryBuilder().build(is);//facotry只需要创建一个

} catch (Exception e) {

e.printStackTrace();

}

}

public static SqlSession getSqlSession(){

SqlSession session = tl.get();

if(session == null) {

session = factory.openSession();

tl.set(session);

}

return session;

}

public static void close(){

SqlSession session = tl.get();

if(session != null){

session.close();

tl.set(null);

}

}

}

在service引入工具类,通过工具类获取连接;通过代理模式(反射)获取dao接口对象。

public class ClientServiceImpl implements ClientService {

@Override

public List login(String cliName, String cliPassword) {

//获取连接

SqlSession session = MyBatisUtil.getSqlSession();

//生成对象

ClientDao clientDao = session.getMapper(ClientDao.class);

//调用方法

List list = clientDao.selectUser(cliName, cliPassword);

//关闭流

MyBatisUtil.close();

return list;

}

}

注意事项:如果使用的事务方式为JDBC,则需要手工commit提交,即session.commit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值