Mybatis 入门到理解篇

JavaWeb(5.Mybatis) MyBatis是一款优秀的持久层框架,用于简化 JDBC 开发持久层负责**将数据到保存到数据库**的那一层代码JavaEE三层架构表现层(页面展示);业务层(逻辑判断);持久层(将数据保存到数据库的代码)框架框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型在框架的基础之上构建软件编写更加高效规范通用可扩展JDBC 缺点硬编码想要改动就必须对代码进行更改,重新编译打包注册驱动,获取连接SQL 语句操作繁琐手动设置参数手动封装结果集改变缺点硬编码——>配置文件。 阅读详情

MyBatis

        MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

     本教程是用maven构建项目、不会maven的看这篇文章!-----Maven教程

  • 开发工具:idea
  • 语言:java
  • 项目结构:maven项目
  • mysql数据库

 

    本教程有 MyBatis三种开发方式:

       mybatis本地调试、代理开发方式、传统开发方式!

 

 

1、入门案例

 

1.1、db.properties文件

 

<span style="font-size:18px;">jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8
jdbc.username=用户名
jdbc.password=密码</span>

 

1.1.1SQL语句、数据表

 

/*
SQLyog v10.2 
MySQL - 5.1.72-community : Database - mybatis
*********************************************************************
*/
/*Table structure for table `items` */

CREATE TABLE `items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL COMMENT '商品名称',
  `price` float(10,1) NOT NULL COMMENT '商品定价',
  `detail` text COMMENT '商品描述',
  `pic` varchar(64) DEFAULT NULL COMMENT '商品图片',
  `createtime` datetime NOT NULL COMMENT '生产日期',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

/*Table structure for table `orderdetail` */

CREATE TABLE `orderdetail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `orders_id` int(11) NOT NULL COMMENT '订单id',
  `items_id` int(11) NOT NULL COMMENT '商品id',
  `items_num` int(11) DEFAULT NULL COMMENT '商品购买数量',
  PRIMARY KEY (`id`),
  KEY `FK_orderdetail_1` (`orders_id`),
  KEY `FK_orderdetail_2` (`items_id`),
  CONSTRAINT `FK_orderdetail_1` FOREIGN KEY (`orders_id`) REFERENCES `orders` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_orderdetail_2` FOREIGN KEY (`items_id`) REFERENCES `items` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

/*Table structure for table `orders` */

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT '下单用户id',
  `number` varchar(32) NOT NULL COMMENT '订单号',
  `createtime` datetime NOT NULL COMMENT '创建订单时间',
  `note` varchar(100) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `FK_orders_1` (`user_id`),
  CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

/*Table structure for table `user` */

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `sex` char(1) DEFAULT NULL COMMENT '性别',
  `address` varchar(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;

 

插入数据:

 

 

/*
SQLyog v10.2 
MySQL - 5.1.72-community : Database - mybatis
*********************************************************************
*/
/*Data for the table `items` */

insert  into `items`(`id`,`name`,`price`,`detail`,`pic`,`createtime`) values (1,'台式机',3000.0,'该电脑质量非常好!!!!',NULL,'2016-02-03 13:22:53'),(2,'笔记本',6000.0,'笔记本性能好,质量好!!!!!',NULL,'2015-02-09 13:22:57'),(3,'背包',200.0,'名牌背包,容量大质量好!!!!',NULL,'2016-02-06 13:23:02');

/*Data for the table `orderdetail` */

insert  into `orderdetail`(`id`,`orders_id`,`items_id`,`items_num`) values (1,3,1,1),(2,3,2,3),(3,4,3,4),(4,4,2,3);

/*Data for the table `orders` */

insert  into `orders`(`id`,`user_id`,`number`,`createtime`,`note`) values (3,1,'1000010','2016-02-04 13:22:35',NULL),(4,1,'1000011','2016-02-03 13:22:41',NULL),(5,10,'1000012','2016-02-12 16:13:23',NULL);

/*Data for the table `user` */

insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'王五',NULL,'2',NULL),(10,'张三','2016-07-10','1','北京市'),(16,'张小明',NULL,'1','河南郑州'),(22,'陈小明',NULL,'1','河南郑州'),(24,'张三丰',NULL,'1','河南郑州'),(25,'陈小明',NULL,'1','河南郑州'),(26,'王五',NULL,NULL,NULL);

 

 

 

 

1.2、pom.xml文件

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>web-test-com</groupId>
    <artifactId>MyBatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

    </dependencies>


</project>

 

 

1.3、SqlMappingConfig.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 resource="db.properties">
		<!--properties中还可以配置一些属性名和属性值 -->
		<!-- <property name="jdbc.driver" value=""/> -->
	</properties>

	<!-- 全局配置参数,需要时再设置 -->
	<!-- <settings> </settings> -->

	<typeAliases>
		<!-- 别名定义 -->
		<!-- 针对单个别名定义 type:类型的路径 alias:别名 -->
		<!-- <typeAlias type="cn.czy.mybatis.po.User" alias="user"/> -->
		<typeAlias type="cn.com.czy.mybatis.pojo.User" alias="user" />
		<!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) -->
		<package name="cn.com.mybatis.mapper" />
	</typeAliases>

	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理,事务控制由mybatis -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池,由mybatis管理 -->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>


	<!-- 加载 映射文件 -->
	<mappers>
	
	
		<!--通过resource方法一次加载一个映射文件 -->
                <!--注意这里的路径和xml文件 -->
               <mapper resource="sqlMapper/user.xml" />
		<mapper resource="sqlMapper/userMapper.xml" />
		<mapper resource="sqlMapper/OrdersMapperCustom.xml"/>

		<!-- 批量加载mapper 指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载 -->
		<!-- 遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 -->
		<!-- 中 上边规范的前提是:使用的是mapper代理方法 
		<package name="cn.com.czy.mybatis.two.mapper" />-->
		
	</mappers>

</configuration>

 

1.4、user.xml文件(注意在SqlMappingConfig.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="test">

	<!-- 在 映射文件中配置很多sql语句 -->
	<!-- 将sql语句封装到mappedStatement对象中,所以将id称为statement的id -->
	<!-- parameterType:指定输入 参数的类型,这里指定int型 #{}表示一个占位符号 -->
	<!-- #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 -->
	<!-- 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 -->
	<!-- resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 -->
	<select id="findUserById" parameterType="int"  resultType="user">
		SELECT * FROM USER WHERE id=#{value}
	</select>
</mapper>

 

1.5、测试类

 

 

package cn.com.czy.mybatis.first;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import cn.com.czy.mybatis.pojo.User;
import org.junit.Test;

/**
 * 《单表映射》
 * 入门程序总结:这是简单的mybatis入门程序
 * -- 1、映射(mapper)文件是user.xml --  -- 
 * -- 2、逻辑基本的resultType、parameterType等一下基础知识  --  -- 
 * -- 3、SqlSessionFactory、SqlSession的原理  --  -- 
 */
public class MybatisFirst {

	public SqlSessionFactory getSqlSessionFactory() throws IOException {
		// mybatis配置文件
		String resource = "config/SqlMapConfig.xml";
		// 得到配置文件流
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 创建会话工厂,传入mybatis的配置文件信息
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		return sqlSessionFactory;
	}

	// 根据id查询用户信息,得到一条记录结果
	@Test
	public void findUserByIdTest() throws IOException {

		// 通过工厂得到SqlSession
		SqlSession sqlSession = this.getSqlSessionFactory().openSession();

		// 通过SqlSession操作数据库
		// 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
		// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
		// sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象
		
                // selectOne查询出一条记录(这种很麻烦的!!!往后看看)
		User user = sqlSession.selectOne("test.findUserById", 1);
		System.out.println(user);
		// 释放资源
		sqlSession.close();
	}
}

 

1.6、selectOne和selectList的解释

      selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。

      selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。

 

 

 

 

总结:mybatis和hibernate本质区别和应用场景?

 

    hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。

对sql语句进行优化、修改比较困难的。

 

    mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。

 

     

 

 

2.1、传统的方式写mybatis的应用程序

2.3、环境搭建

pom.xml文件

<span style="font-size:18px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>web-test-com</groupId>
    <artifactId>MyBatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

    </dependencies>
</project>

</span>

 

2.4、SqlMappingConfig.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 resource="db.properties">
		<!--properties中还可以配置一些属性名和属性值 -->
		<!-- <property name="jdbc.driver" value=""/> -->
	</properties>

	<!-- 全局配置参数,需要时再设置 -->
	<!-- <settings> </settings> -->

	<typeAliases>
		<!-- 别名定义 -->
		<!-- 针对单个别名定义 type:类型的路径 alias:别名 -->
		<!-- <typeAlias type="cn.czy.mybatis.po.User" alias="user"/> -->
		<typeAlias type="cn.com.czy.mybatis.pojo.User" alias="user" />
		<!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) -->
		<package name="cn.com.mybatis.mapper" />
	</typeAliases>

	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理,事务控制由mybatis -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池,由mybatis管理 -->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>


	<!-- 加载 映射文件 -->
	<mappers>
	
	
		<!--通过resource方法一次加载一个映射文件 -->
		<mapper resource="sqlMapper/user.xml" />
		<mapper resource="sqlMapper/userMapper.xml" />
		<mapper resource="sqlMapper/OrdersMapperCustom.xml"/>

		<!-- 批量加载mapper 指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载 -->
		<!-- 遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 -->
		<!-- 中 上边规范的前提是:使用的是mapper代理方法 
		<package name="cn.com.czy.mybatis.two.mapper" />-->
		
	</mappers>

</configuration>



 

 

 

 

 

2.5、映射文件user.xml(注意在SqlMappingConfig.xml文件中已经引用它)

 

<span style="font-size:18px;"><?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">


<!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离  -->
<!-- 注意:使用mapper代理方法开发,namespace有特殊重要的作用 -->
<mapper namespace="test">

	<!-- 在 映射文件中配置很多sql语句 -->
	<!-- 将sql语句封装到mappedStatement对象中,所以将id称为statement的id -->
	<!-- parameterType:指定输入 参数的类型,这里指定int型 #{}表示一个占位符号 -->
	<!-- #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 -->
	<!-- 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 -->
	<!-- resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 -->
	<select id="findUserById" parameterType="int"
		resultType="user">
		<!-- 需求:通过select执行id查询用户表的记录 -->
		SELECT * FROM USER WHERE id=#{value}
	</select>

	<!-- resultType:指定就是单条记录所映射的java对象类型  -->
	<!-- ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。 使用${}拼接sql,引起 sql注入  -->
	<!-- ${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value -->
	<!-- 这个mapper文件user对象已经用别名代替 -->
	<select id="findUserByName" parameterType="java.lang.String"
		resultType="user">
		<!-- 根据用户名称模糊查询用户信息,可能返回多条  -->
		SELECT * FROM USER WHERE username LIKE '%${value}%'
	</select>

	
	<!-- parameterType:指定输入 参数类型是pojo(包括 用户信息)--> 
	<!-- #{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值 -->
	<insert id="insertUser" parameterType="user">
		<!-- SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用与自增主键 -->
		<!-- keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性 -->
		<!-- order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序 -->
		<!-- resultType:指定SELECT LAST_INSERT_ID()的结果类型 -->
		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			<!-- 将插入数据的主键返回,返回到user对象中 -->
			SELECT LAST_INSERT_ID()
		</selectKey>
		insert into user(username,birthday,sex,address)
		value(#{username},#{birthday},#{sex},#{address})
		<!-- 使用mysql的uuid()生成主键 执行过程: -->
		<!-- 首先通过uuid()得到主键,将主键设置到user对象的id属性中 其次在insert执行时,从user对象中取出id属性值 -->
		<!-- <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> -->
		<!-- SELECT uuid() </selectKey> insert into user(id,username,birthday,sex,address) -->
		<!-- value(#{id},#{username},#{birthday},#{sex},#{address}) -->
	</insert>


	<delete id="deleteUser" parameterType="java.lang.Integer">
		<!-- 删除 用户 根据id删除用户,需要输入 id值 -->
		delete from user where
		id=#{id}
	</delete>


	<!-- 需要传入用户的更新信息 parameterType指定user对象,包括 id和更新信息, -->
	<!-- 注意:id必须存在 -->
	<!-- #{id}:从输入 user对象中获取id属性值 -->
	<update id="updateUser" parameterType="user">
		<!-- 根据id更新用户 分析: 需要传入用户的id -->
		update user set
		username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
		where id=#{id}
	</update>

</mapper>


</span>

 

 

2.6、pojo类

 

<span style="font-size:18px;">package cn.com.czy.mybatis.pojo;

import java.util.Date;


/**
 * 
 * <p>Title: User</p>
 * <p>Description:用户pojo </p>
 */
public class User {
	
	//属性名和数据库表的字段对应
	private int id;
	private String username;	// 用户姓名
	private String sex;		// 性别
	private Date birthday;		// 生日
	private String address;		// 地址
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", sex=" + sex
				+ ", birthday=" + birthday + ", address=" + address + "]";
	}


}
</span>


 

 

 

2.7、测试类(传统的不用接口、只是简单的)

 

 

package cn.com.czy.mybatis.first;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import cn.com.czy.mybatis.pojo.User;
import org.junit.Test;

/**
 * 《单表映射》
 * 入门程序总结:这是简单的mybatis入门程序
 * -- 1、映射(mapper)文件是user.xml --  -- 
 * -- 2、逻辑基本的resultType、parameterType等一下基础知识  --  -- 
 * -- 3、SqlSessionFactory、SqlSession的原理  --  -- 
 */
public class MybatisFirst {

	public SqlSessionFactory getSqlSessionFactory() throws IOException {
		// mybatis配置文件
		String resource = "config/SqlMapConfig.xml";
		// 得到配置文件流
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// 创建会话工厂,传入mybatis的配置文件信息
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		return sqlSessionFactory;
	}

	

	// 根据id查询用户信息,得到一条记录结果
	@Test
	public void findUserByIdTest() throws IOException {

		// 通过工厂得到SqlSession
		SqlSession sqlSession = this.getSqlSessionFactory().openSession();

		// 通过SqlSession操作数据库
		// 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
		// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
		// sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象
		// selectOne查询出一条记录
		User user = sqlSession.selectOne("test.findUserById", 1);

		System.out.println(user);

		// 释放资源
		sqlSession.close();

	}

	// 根据用户名称模糊查询用户列表
	@Test
	public void findUserByNameTest() throws IOException {

		// 通过工厂得到SqlSession
		SqlSession sqlSession = this.getSqlSessionFactory().openSession();
		// list中的user和映射文件中resultType所指定的类型一致
		List<User> list = sqlSession.selectList("test.findUserByName", "小明");
		System.out.println("信息:" + list);
		sqlSession.close();

	}

	// 添加用户信息
	@Test
	public void insertUserTest() throws IOException {

		// 通过工厂得到SqlSession
		SqlSession sqlSession = this.getSqlSessionFactory().openSession();
		// 插入用户对象
		User user = new User();
		user.setUsername("王小军");
		user.setBirthday(new Date());
		user.setSex("1");
		user.setAddress("河南郑州");

		sqlSession.insert("test.insertUser", user);

		// 提交事务
		sqlSession.commit();

		// 获取用户信息主键
		System.out.println(user.getId());
		// 关闭会话
		sqlSession.close();

	}

	// 根据id删除 用户信息
	@Test
	public void deleteUserTest() throws IOException {

		// 通过工厂得到SqlSession
		SqlSession sqlSession = this.getSqlSessionFactory().openSession();

		// 传入id删除 用户
		sqlSession.delete("test.deleteUser", 49);

		// 提交事务
		sqlSession.commit();

		// 关闭会话
		sqlSession.close();

	}

	// 更新用户信息
	@Test
	public void updateUserTest() throws IOException {

		// 通过工厂得到SqlSession
		SqlSession sqlSession = this.getSqlSessionFactory().openSession();
		// 更新用户信息

		User user = new User();
		// 必须设置id
		user.setId(41);
		user.setUsername("王大军");
		user.setBirthday(new Date());
		user.setSex("2");
		user.setAddress("河南郑州");

		sqlSession.update("test.updateUser", user);

		// 提交事务
		sqlSession.commit();

		// 关闭会话
		sqlSession.close();

	}

}

 

 

3.1、mapper代理方法来实现(实际开发用到的)

 

1、pom.xml文件一样

2、SqlMappingConfig.xml一样

3、开发规范:编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。

 

 

 

3.2、接口UserMapping.xml文件(可能有点多、挑着看就好)

(注意在SqlMappingConfig.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命名空间,作用就是对sql进行分类化管理,理解sql隔离 -->
<!-- 注意:使用mapper代理方法开发,namespace有特殊重要的作用,namespace等于mapper接口地址 -->
<mapper namespace="cn.com.mybatis.mapper.UserMapper">

	<!-- 定义sql片段 -->
	<!-- id:sql片段的唯 一标识 -->
	<!-- 经验:是基于单表来定义sql片段,这样话这个sql片段可重用性才高 在sql片段中不要包括 where -->
	<sql id="query_user_where">
		<if test="userCustom!=null">
			<if test="userCustom.sex!=null and userCustom.sex!=''">
				and user.sex = #{userCustom.sex}
			</if>
			<if test="userCustom.username!=null and userCustom.username!=''">
				and user.username LIKE '%${userCustom.username}%'
			</if>
		</if>
	</sql>

	<!-- 已经指定好别名! -->
	<!-- 运用sql片段   -->
	<!-- 用户信息综合查询 #{userCustom.sex}:取出pojo包装对象中性别值  -->
	<!-- ${userCustom.username}:取出pojo包装对象中用户名称 -->
	<select id="findUserList" parameterType="UserQueryVo"
		resultType="UserCustom">
		SELECT * FROM USER
		<!-- where可以自动去掉条件中的第一个and -->
		<where>
			<!-- 引用sql片段 的id,如果refid指定的id不在本mapper文件中,需要前边加namespace -->
			<include refid="query_user_where"></include>
			<!-- 在这里还要引用其它的sql片段 -->
		</where>
	</select>

	<!-- 用户信息综合查询总数 parameterType:指定输入类型和findUserList一样 resultType:输出结果类型 -->
	<select id="findUserCount" parameterType="UserQueryVo"
		resultType="int">
		SELECT count(*) FROM USER
		<!-- where可以自动去掉条件中的第一个and -->
		<where>
			<!-- 引用sql片段 的id,如果refid指定的id不在本mapper文件中,需要前边加namespace -->
			<include refid="query_user_where"></include>
			<!-- 在这里还要引用其它的sql片段 -->
		</where>
	</select>

	<!-- 在 映射文件中配置很多sql语句 -->
	<!-- 需求:通过id查询用户表的记录 -->
	<!-- 通过 select执行数据库查询 -->
	<!-- id:标识 映射文件中的 sql -->
	<!-- 将sql语句封装到mappedStatement对象中,所以将id称为statement的id -->
	<!-- parameterType:指定输入 参数的类型,这里指定int型 -->
	<!-- #{}表示一个占位符号 -->
	<!-- #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 -->
	<!-- resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 -->
	<!-- mapper开发代理规范2:UserMapper 接口中的接口方法名跟id名一样 -->
	<!-- mapper开发代理规范3:UserMapper 接口中的返回类型名跟resultType类型一样 -->
	<!-- mapper开发代理规范 4:UserMapper 接口中的参数类型名跟parameterType类型一样 -->
	<select id="findUserById" parameterType="int" resultType="user">
		SELECT * FROM USER WHERE id=#{value}
	</select>

	<!-- 根据用户名称模糊查询用户信息,可能返回多条 resultType:指定就是单条记录所映射的java对象 类型 ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。 
		使用${}拼接sql,引起 sql注入 ${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value -->
	<select id="findUserByName" parameterType="java.lang.String"
		resultType="user">
		SELECT * FROM USER WHERE username LIKE '%${value}%'
	</select>



	<!-- 定义resultMap -->
	<!-- 将SELECT id id_,username username_ FROM USER 和User类中的属性作一个映射关系 -->
	<!-- type:resultMap最终映射的java对象类型,可以使用别名 -->
	<!-- id:对resultMap的唯一标识 -->
	<resultMap type="user" id="userResultMap">
		<!--id表示查询结果集中唯一标识 -->
		<!--column:查询出来的列名 -->
		<!--property:type指定的pojo类型中的属性名 最终resultMap对column和property作一个映射关系 (对应关系) -->
		<id column="id_" property="id" />
		<!--result:对普通名映射定义 -->
		<!--column:查询出来的列名 -->
		<!--property:type指定的pojo类型中的属性名 最终resultMap对column和property作一个映射关系 (对应关系) -->
		<result column="username_" property="username" />
	</resultMap>

	<!-- 使用resultMap进行输出映射 -->
	<!--resultMap:指定定义的resultMap的id,如果这个resultMap在其它的mapper文件,前边需要加namespace -->
	<select id="findUserByIdResultMap" parameterType="int"
		resultMap="userResultMap">
		SELECT id id_,username username_ FROM USER WHERE id=#{value}
	</select>


</mapper>



3.3、UserMapping.java类

 

 

package cn.com.mybatis.mapper;

import java.util.List;

import cn.com.czy.mybatis.pojo.User;

/**
 * 总结:
 * 1、mapper代理方式、理解mapper开发规范 
 * 2、mapper文件是usermapper.xml
 * 3、了解动态sql、别名、sql代码片、
 * 4、了解  resultMap
 * 
 * <p>
 * Title: UserMapper
 * </p>
 * <p>
 * Description: mapper接口,相当 于dao接口,用户管理
 * </p>
 */
public interface UserMapper {

	// 根据id查询用户信息
	public User findUserById(int id) throws Exception;

	// 根据用户名列查询用户列表
	public List<User> findUserByName(String name) throws Exception;

	// 根据id查询用户信息,使用resultMap输出
	public User findUserByIdResultMap(int id) throws Exception;

	// 用户信息综合查询
	public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;

	// 用户信息综合查询总数
	public int findUserCount(UserQueryVo userQueryVo) throws Exception;

	// 插入用户
	public void insertUser(User user) throws Exception;

	// 删除用户
	public void deleteUser(int id) throws Exception;

}

 

 

3.3、包装类、继承类(这些只是为了以后更好的拓展罢了)

 

UserMapping的子类

 

package cn.com.mybatis.mapper;

import cn.com.czy.mybatis.pojo.User;

/**
 * 总结:
 * 1、mapper代理方式、理解mapper开发规范 
 * 2、mapper文件是usermapper.xml
 * 3、了解动态sql、别名、sql代码片、
 * 4、了解  resultMap
 * 
 * <p>Title: UserCustom</p>
 * <p>Description: 用户的扩展类</p>
 */
public class UserCustom extends User{
	
	//可以扩展用户的信息

}

 

UserMapping的包装类

package cn.com.mybatis.mapper;


/**
 * 总结:
 * 1、mapper代理方式、理解mapper开发规范 
 * 2、mapper文件是usermapper.xml
 * 3、了解动态sql、别名、sql代码片、
 * 4、了解  resultMap
 * 
 * <p>Title: UserQueryVo</p>
 * <p>Description:包装类型 </p>
 */
public class UserQueryVo {
	
	
	//在这里包装所需要的查询条件
	
	//用户查询条件
	private UserCustom userCustom;

	public UserCustom getUserCustom() {
		return userCustom;
	}

	public void setUserCustom(UserCustom userCustom) {
		this.userCustom = userCustom;
	}

	//可以包装其它的查询条件,订单、商品
	//....
}

 

3.5测试类

 

 

package cn.com.mybatis.mapper;

import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import cn.com.czy.mybatis.pojo.User;

/*
 * 
 * 总结:
 * 1、mapper代理方式、理解mapper开发规范 
 * 2、mapper文件是usermapper.xml
 * 3、了解动态sql、别名、sql代码片、
 * 4、了解  resultMap
 *
 */
public class UserMapperTest {

	private SqlSessionFactory sqlSessionFactory;

	// 此方法是在执行testFindUserById之前执行
	@Before
	public void setUp() throws Exception {

		// mybatis配置文件
		String resource = "config/SqlMapConfig.xml";
		// 得到配置文件流
		InputStream inputStream = Resources.getResourceAsStream(resource);

		// 创建会话工厂,传入mybatis的配置文件信息
		sqlSessionFactory = new SqlSessionFactoryBuilder()
				.build(inputStream);
	}

	//用户信息的综合 查询
	@Test
	public void testFindUserList() throws Exception {
		
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		//创建UserMapper对象,mybatis自动生成mapper代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		
		//创建包装对象,设置查询条件
		UserQueryVo userQueryVo = new UserQueryVo();
		UserCustom userCustom = new UserCustom();
		userCustom.setSex("1");
		userCustom.setUsername("郑游");
		userQueryVo.setUserCustom(userCustom);
		
		//调用userMapper的方法
		List<UserCustom> list = userMapper.findUserList(userQueryVo);
		
		System.out.println(list);
	}
	
	
	
	@Test
	public void testFindUserCount() throws Exception {
		
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		//创建UserMapper对象,mybatis自动生成mapper代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		
		//创建包装对象,设置查询条件
		UserQueryVo userQueryVo = new UserQueryVo();
		UserCustom userCustom = new UserCustom();
		userCustom.setSex("1");
		userCustom.setUsername("郑游");
		userQueryVo.setUserCustom(userCustom);
		//调用userMapper的方法
		int count = userMapper.findUserCount(userQueryVo);
		
		System.out.println(count);
	}
	
	
	
	@Test
	public void testFindUserById() throws Exception {
		
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		//创建UserMapper对象,mybatis自动生成mapper代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		
		//调用userMapper的方法
		
		User user = userMapper.findUserById(1);
		
		System.out.println(user);
		
		
	}
	
	
	@Test
	public void testFindUserByName() throws Exception {
		
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		//创建UserMapper对象,mybatis自动生成mapper代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		
		//调用userMapper的方法
		
		List<User> list = userMapper.findUserByName("小明");
		
		sqlSession.close();
		
		System.out.println(list);
		
		
	}
	
	@Test
	public void testFindUserByIdResultMap() throws Exception {
		
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		//创建UserMapper对象,mybatis自动生成mapper代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		
		//调用userMapper的方法
		
		User user = userMapper.findUserByIdResultMap(1);
		
		System.out.println(user);
		
	}

}

 

 

 

推荐教程

     Maven官方中文教程

     Mybatis的mapper.xml文件详解

     SSM框架教程

     Mybatis 解析 SQL 源码分析(写的很不错的一篇文章)

 

 

 

 

 

 



Mybatis 框架理解与快速入门详解 软件框架(software framework),通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。框架的功能类似于基础设施,与具体的软件应用无关,但是提供并实现最为基础的软件架构和体系。总的来说:框架是一款半成品软件,我们可以基于这个半成品软件继续开发,来完成我们个性化的需求!如图下图所示:我们可以拿不同的框架来搭建我们自己的成品。 1. 为什么需要框架技术:软件系统随着业务的发展,变得越来越复杂,不同领域的业务所涉及到的知 阅读详情

相关推荐

记录LeNet的硬件加速器设计(一)

LeNet的硬件加速器设计实现。

2301_81029398的博客 3546

MyBatis配置文件mybatis-config详解

例如,当一个Java EE的【应用程序部署】在类似JBoss,WebLogic,GlassFish应用【服务器】上时,它们会使用EJB进行应用服务器的事务管理能力。MyBatis支持配置多个environment环境,可以将应用部署到不同的环境上,如DEV【开发环境】,TEST【测试环境】,QA【质量评估环境】,UAT【用户验收环境】,PRODUCTION【生产环境】,可以通过将默认environments的【default属性】设置成想要的environment的id值。在生产环境中,优先考虑这种方式。

piglite的专栏 6431

从数据到特征:基于CAT12的MRI图像预处理实战指南

本文详细介绍了使用CAT12工具进行MRI图像预处理的完整实战流程。从数据获取、环境搭建到核心的AC-PC校正、组织分割、空间标准化与调制,逐步解析如何将原始脑影像数据转化为可用于机器学习的标准化特征图。重点阐述了预处理作为脑影像分析‘生命线’的重要性,并提供了避坑指南与自动化脚本建议,帮助研究者构建高质量的阿尔茨海默症分类模型输入特征。

weixin_29065959的博客 311

mybatis中配置文件mybatisconfig详解---[纯笔记]

mybatis中配置文件详解propertiessettingstypeAliasestypeHandlersobjectFactorypluginsenvironmentstransactionManagerdataSourceJNDIdatabaseIdProvidermappers mybatis中的核心配置文件 一个是全局配置文件,另一个是映射文件; 首先来看一下全局配置文件------->>>> 全局配置文件 这是全局配置文件中各个属性的配置顺序, <!ELEMENT

Gavin 2961

APM32F103 配置CAN

摘要: 本文介绍了基于APM32F103RCT6的CAN通信实现,包含GPIO初始化、CAN配置、数据收发功能。通过配置CAN1的GPIO引脚(PB8/PB9)和波特率(500Kbps),实现标准帧格式的数据传输。发送函数支持8字节数据包,接收函数通过FIFO0处理消息,并根据接收ID触发响应发送(如ID 0x1回复0x2)。代码还包含错误状态检测(如总线关闭处理)和过滤器配置(32位掩码模式)。整体实现了基础的CAN通信与错误管理功能。

weixin_43676660的博客 863

JW01二氧化碳传感器实战:5分钟搞定Arduino环境监测系统(附完整代码)

本文详细介绍了如何使用JW01二氧化碳传感器与Arduino快速搭建环境监测系统。通过简单的硬件连接和完整的代码示例,读者可以在5分钟内实现CO2浓度实时监测,并了解数据解析、常见问题解决及进阶应用扩展。JW01传感器的高精度和易用性使其成为创客和嵌入式开发者的理想选择。

kite3的博客 383

mybatis源码分析-mybatis-config配置文件解析

mybatis源码分析,config配置文件解析

junkangaike的博客 737

STM32实战开发(133):基于STM32的智能GPS定位跟踪系统开发

本文详细介绍了如何基于STM32开发一个智能GPS定位跟踪系统。系统使用NEO-6M GPS模块获取实时定位数据,并通过SIM800L GPRS模块将定位信息上传到远程服务器。通过OLED屏幕实时显示位置数据,使用SD卡存储历史轨迹,并提供蜂鸣器报警功能。项目实现了GPS定位数据的获取、解析、存储和传输,为智能定位系统提供了完整的解决方案。

2201_76125393的博客 1644

javaee入门之旅之mybatis---(3)mybatis-config配置文件

并且可以在配置文件的其他地方引用这些属性。这个功能允许你在配置文件中定义一些可重复使用的值,以便在多个地方使用相同的值,或者以一种更灵活的方式配置一些属性。

xmuci的博客 1591

特别章节-0.1 SolidWorks导出机械臂的URDF模型各个关节坐标系设置

通过Solidworks导出机械臂的URDF模型文件,建立机械臂的各个关节坐标系的规则以及注意点,详细步骤

六眼飞鱼的博客 1万+

46、搭建与配置FTP服务器全攻略

本文详细介绍了如何搭建与配置FTP服务器,以vsftpd为例,涵盖了FTP基础概念、安装步骤、服务控制、安全设置、用户权限管理、文件上传支持、互联网共享配置、客户端使用以及常见问题解决等内容。旨在帮助用户高效、安全地实现文件共享与管理。

time3的博客 88

mybatis mysql 配置文件路径_Mybatis(一):MyBatis配置文件config.xml详解

MyBatis 配置文件基本结构在使用mybatis框架时,首先导入其对应的jar包,并进行相应的配置,所以得对配置文件的每个参数都得了解。一个完全的mybatis配置文件结构如下:/p>PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">注意顺序写的时候也要按...

weixin_31040783的博客 2020

Python爬虫实战:微信小程序内容采集的全面指南

在移动互联网时代,微信小程序已成为企业和个人提供服务的重要渠道。小程序中包含了大量有价值的信息,但微信官方并未提供便捷的数据获取接口。本文将详细介绍如何使用Python爬虫技术采集微信小程序内容,包括最新技术方案、完整代码实现以及应对各种反爬机制的策略。小程序运行在微信封闭环境中,无法直接访问数据通信主要通过HTTPS加密传输内容动态加载,依赖JavaScript渲染微信有严格的反爬机制。

2201_76125261的博客 3121

SSM框架之_Mybatis入门笔记,深入理解(三):配置解析篇

配置解析 核心配置文件 mybatis-config.xml 配置文件中能配置的内容:配置顺序不对会报错 configuration(配置) properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境配置) environment(环境变量) transactionManager(事务管理器) dataSource(数据源) databas

Java_web12138667的博客 233

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java后浪工程师入门必备书单

很久很久以前有一位著名的文学家高尔基先生说过: “书是人类进步的阶梯” 活字印刷术和造纸术的发明,为知识的传承奠定了基础;书籍的诞生让人类的文明得以传承,让知识得以延续。 还有一位著名的哲学家说过:"读书足以怡情,足以傅彩,足以长才。其怡情也,最见于独处幽居之时;其傅彩也,最见于高谈阔论之中;其长才也,最见于处世判事之际。" 可见读书的重要性,这些 "前浪" 不停的在提醒着 "后浪" 要多读书,读好书,好读书。 那些口口声声 一代不如一代的人,应该看着你们 像我一样,我看着你们,满怀羡慕 人

AI课工场 417

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

每天学点Mybatis之总章

每天学点Mybatis之常识

猿计划:拯救程序猿的博客 168

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MyBatis进阶(二)基础总结及高级应用

一. MyBatis基础总结 (一)MyBatis简介 Mybatis简介_舞鹤白沙编码日志-优快云博客 (二)MyBatis基本应用 1. Mybatis快速入门_舞鹤白沙编码日志-优快云博客 2. Mybatis增删改查_舞鹤白沙编码日志-优快云博客 3.MyBatis基础应用_舞鹤白沙编码日志-优快云博客 二. MyBatis高级应用 (一)MyBatis深入 1. Mybatis配置⽂件深⼊_舞鹤白沙编码日志-优快云博客 2.Mybatis复杂映射开发_舞鹤白沙编码日志

舞鹤白沙编码日志 294

MyBatis简单使用和入门理解

本文记录第一次使用Mybatis时碰到的一些错误和简单理解,采用的示例是Eclipse中的JAVA工程,采用XML文件定义数据库连接。 可以使用Java JDBC API直接操作数据库,但使用框架会更便捷、高效而且还可以利用框架提供的某些强大的功能(比如事务管理),而Mybatis就是这样的一个框架。 Mybatis主要由四大部分组成: ①SqlSe...

weixin_34026484的博客 85

MyBatis快速入门第二讲——MyBatis的快速入门

MyBatis框架的架构MyBatis框架的架构如下图: 下面作简要概述: SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句,此文件需要在SqlMapConfig.xml中加载。 通过mybatis环境等配置信息构造SqlSessionFactory(即会

李阿昀的博客 1万+

Mybatis入门(练习篇)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、项目构建二、配置xml1.配置SqlMapConfig.xml1.1在配置SqlMapConfig文件之前要建好bean,这里不是主要练习,所以不描述了,直接把bean代码发出来,ps:这里包是和数据库表一致的,学习到mybatis应该基本都会了,就不说了。1.2编写一个简单的dao,不用写实现类,1.3导入依赖三、配置UerDao.xml四、完成java代码五、运行截图六、数据库部分代码总结 前言 Mybatis框架入门

qq_18609615的博客 1401

SpringBoot学习指南:从入门到精通,全网最详尽的SpringBoot学习指南(基础篇)

​ 入门案例做完了,这个时候回忆一下咱们之前说的SpringBoot的功能是什么还记得吗?加速Spring程序的开发,现在是否深有体会?再来看SpringBoot技术的设计初衷就很容易理解了。​ SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。​ 都简化了了哪些东西呢?Spring程序缺点依赖设置繁琐。

weixin_69912448的博客 4801

MyBatis实战:从入门到精通,一站式学习MyBatis的最佳选择

MyBatis实战:从入门到精通,一站式学习MyBatis的最佳选择 项目介绍 MyBatis实战是一个专注于MyBatis技术学习的开源项目,旨在通过丰富的实战示例代码,帮助开发者从零开始掌握MyBatis的核心概念与高级用法。项目中的示例代码主要来源于刘增辉老师所著的《MyBatis从入门到精通》一书,经过精心整理与实践,确保每一个示例都能帮助开发者深入理解MyBatis的各个方面。 项目技术...

gitblog_00834的博客 1112

Mybatis入门很难吗?

m0_69528918的博客 1919

MyBatis:从入门到深度理解

MyBatis是一款广泛应用于Java企业应用开发的持久层框架,以其强大的SQL定制能力、高级映射机制和良好的性能著称。它通过XML或注解配置,简化了JDBC代码和数据库操作,支持自定义SQL、存储过程和复杂映射。MyBatis的核心思想是将SQL语句与Java对象映射,提升开发效率。其发展历程从iBatis到MyBatis,逐步成为Java持久化领域的重要框架。MyBatis适用于需要高度控制SQL、复杂业务逻辑和与现有数据库集成的场景。使用过程包括配置文件加载、会话工厂创建、SQL执行和事务管理。MyB

2401_85750367的博客 1391
上一篇: Mybatis入门例子
下一篇: linux上安装jdk
AndyChen9988
博客等级 码龄11年 276粉丝 89原创
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值