一、快速入门mybatis教程

快速入门mybatis

什么是mybatis?

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

一、快速入门mybatis

  1. 创建java工程
  2. 添加mybatis与mysql数据库驱动包。
  3. 在mysql数据库下创建数据库表。
  4. 在entity包下创建数据库表对应的实体类。
  5. 在mapper包下创建实体类对应的xml映射文件。
  6. 在类路径下创建mybatis的xml核心配置文件,注意引入映射文件。
  7. 使用mybatis的核心api对象加载配置文件。

———————————————————————————

二、注意

1.需要命名的地方,绝对不允许单个单词;

2.类的成员变量不建议long,不允许基本类型;

3.表字段名不允许u_name,成员变量名不允许uName;成员变量名不允许is开头;

4.表中类型datetime,date,timestamp,实体类的成员变量类型,建议使用String;

5.23种gof设计模式

———————————————————————————

三、mybatis的核心对象与方法(核心API):

1.SqlSessionFactoryBuilder:构建者模式应用,

有build方法,用来构建复杂的单例的SqlSessionFactory对象

生命周期:用完即销毁.

2.SqlSessionFactory:工厂模式应用,

与构建者的区别在于工厂生产N个对象.实现类:DefaultSqlSessionFactory,该对象中持有的DataSource

生命周期:全局唯一.放在web项目下理解,tomcat启动期间,只有一份Factory.

3.SqlSession:数据库会话对象,

实现类DefaultSqlSession.该对象内部有curd方法执行数据库表操作.(selectOne,selectList,insert,delete,update,getMapper),只有getMapper方法重要.

生命周期:每次数据库操作临时打开会话,用完关闭会话.

4.dao接口的代理对象:

mybatis-config核心配置文件: id随便定义的,default必须和id一致

sysuser-mapper映射文件配置:

logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。有效值:SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGIN

———————————————————————————

四、如何配置核心文件和映射文件?

1.配置文件

settings–>日志|驼峰命名开启

type Alias–>别名标签

environments—>数据库环境

mappers加载外部的xml映射文件

2.映射文件

mapper:namespace=“dao接口的全名”

五、对几个配置文件的解释说明:

1、配置文件 Configure.xml 是 mybatis 用来建立 sessionFactory,里面主要包含了数据库连接相关内容,还有 java 类所对应的别名,比如:<typeAlias alias="User" type="com.yiibai.mybatis.models.User"/> 这个别名非常重要,在具体的类的映射中,比如:User.xml 中 resultType 就是对应这个。要保持一致,这里的 resultType 还有另外单独的定义方式,后面学习到我们再详细介绍说明。
2、Configure.xml 里面 的<mapper resource="com/yiibai/mybatis/models/User.xml"/>是包含要映射的类的 xml 配置文件。
3、在User.xml 文件里面主要是定义各种 SQL 语句,以及这些语句的参数,以及要返回的类型等等。

基本+string

实体

———————————————————————————

六、Mybatis原理解析

1、加载mybatis全局配置文件(数据源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项。

  2、SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory,用来开启SqlSession。

  3、SqlSession对象完成和数据库的交互:

  a、用户程序调用mybatis接口层api(即Mapper接口中的方法)

  b、SqlSession通过调用api的Statement ID找到对应的MappedStatement对象

  c、通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象

  d、JDBC执行sql。

  e、借助MappedStatement中的结果映射关系,将返回结果转化成HashMap、JavaBean等存储结构并返回。

————————————————————————————————

原生JDBC实现六步骤

1.注册驱动

2.获取数据库连接对象Connection

3.获取执行sql语句的执行者对象Statement

4.执行sql语句,获取结果

5.处理结果

6.释放资源(IO流)

/**
 * JDBC连接数据库和关闭资源工具类
 * @author limeng
 *
 */
public class JDBCUtils {
	private static String drivername;
	private static String url;
	private static String user;
	private static String password;
	
	/**
	 * 通过静态代码块,初始化数据库连接配置数据,并且注册数据库驱动
	 */
	static {
		try {
			Properties pr = new Properties();
			//通过读取Properties文件给属性赋值,即每次使用该工具类都会读取最新配置进行连接
			pr.load(new FileInputStream(new File("jdbc_config.properties")));
			drivername = pr.getProperty("drivername");
			url = pr.getProperty("url");
			user = pr.getProperty("user");
			password = pr.getProperty("password");
			Class.forName(drivername);
		} catch (ClassNotFoundException | IOException e) {
			e.printStackTrace();
			throw new RuntimeException("获取数据库连接异常,请检查配置数据");
		} 
	}
	/**
	 * 获取数据库连接对象
	 * @return
	 */
	public static Connection getConnection() {
		Connection con = null;
		try {
			con = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("获取数据库连接异常,请检查配置数据");
		}
		return con;
	}
	/**
	 * 关闭JDBC相关资源
	 * @param con
	 * @param sta
	 * @param rs
	 */
	public static void closeResource(Connection con,Statement sta,ResultSet rs) {
		try {
			if(con!=null) {
				con.close();
			}
			if(sta!=null) {
				sta.close();
			}
			if(rs!=null) {
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}


通过JDBC工具类进行增删改查操作

 
/**
 * 通过JDBC工具类进行增删改查操作
 * @author Limeng
 *
 */
public class JDBCDemoByUtils {
	
	private static String sqlStatement;
	public static void main(String[] args) throws Exception {
		//通过工具类获取数据库连接对象
		Connection con = JDBCUtils.getConnection();
		//通过连接创建数据库执行对象
		Statement sta = con.createStatement();
		//为查询的结果集准备接收对象
		ResultSet rs = null;
		//查询
		sqlStatement = "SELECT * FROM DEPT";
		qry(sta,sqlStatement,rs);
		//增加
		sqlStatement = "INSERT INTO DEPT VALUES('50','TEST','CHINA')";
		System.out.println("插入执行结果:"+update(sta,sqlStatement));
		//更新
		sqlStatement = "UPDATE DEPT SET loc='SHAOXING' WHERE DEPTNO = '50'";
		System.out.println("更新执行结果:"+update(sta,sqlStatement));
		//删除
		sqlStatement = "DELETE FROM DEPT WHERE DEPTNO = '50'";
		System.out.println("删除执行结果:"+update(sta,sqlStatement));
		JDBCUtils.closeResource(con, sta, rs);
	}
	/**
	 * 查询
	 * @param sta
	 * @param sql
	 * @param rs
	 * @throws SQLException
	 */
	private static void qry(Statement sta,String sql,ResultSet rs) throws SQLException {
		rs = sta.executeQuery(sql);
		while(rs.next()) {
			System.out.println(rs.getObject("deptno"));
		}
	}
	/**
	 * 增删改
	 * @param sta
	 * @param sql
	 * @return
	 * @throws SQLException
	 */
	private static int update(Statement sta,String sql) throws SQLException {
		return sta.executeUpdate(sql);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值