1、是一个优秀的持久层框架,对jdbc的操作数据库的过程进行封装,开发者只需要关注SQL本身,不需要花费精力去处理例如注册驱动,创建connection、创建satement、手动设置参数、结果集检索等;
2、通过xml或者注解的方式将要执行的各种statement(statement、perparedStatement、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成Java对象返回
3、jdbc问题
user.java
package com.itheima.mybatis.pojo; import java.io.Serializable; import java.util.Date; public class User implements Serializable { /** * */ private static final long serialVersionUID = 1L; private Integer id; private String username;// 用户姓名 private String sex;// 性别 private Date birthday;// 生日 private String address;// 地址 public Integer getId() { return id; } public void setId(Integer 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 + "]"; } }sqlMapConfig.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> <!-- 和spring整合后,environment配置将废除 --> <properties resource="jdbc.properties"/> <!-- 别名 包以其子包下所有类 头字母大小都行--> <typeAliases> <!-- <typeAlias type="com.itheima.mybatis.pojo.User" alias="User"/> --> <package name="com.itheima.mybatis.pojo"/> </typeAliases> <!-- 和spring整合后 environments配置将废除 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理 --> <transactionManager type="JDBC" /> <!-- 数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true" /> <property name="username" value="root" /> <property name="password" value="jzb9981128" /> </dataSource> </environment> </environments> <!-- Mapper的位置 写Sql语句的文件的位置 将写好的sql映射文件注册到全局配置文件中 --> <mappers> <mapper resource="sqlmap/User.xml" /> </mappers> </configuration>user.xml(sql映射文件)
<?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"> <!-- 写Sql语句 --> <!-- 命名空间 test.findUserBYId --> <mapper namespace="test"> <!-- namespace:命名空间 id:唯一标示符 resultType:返回数据类型,若返回的数据类型是User对象,则需要复制User的全称 #{v}:从传递进来的参数中取出id值 --> <!-- 通过ID查询一个用户 --> <select id="findUserById" parameterType="Integer" resultType="com.itheima.mybatis.pojo.User"> select * from user where id = #{v} </select> <!-- //根据用户名称模糊查询用户列表 #{} select * from user where id = ? 占位符 ? == '五' ${} select * from user where username like '%五%' 字符串拼接 --> <select id="findUserByUsername" parameterType="String" resultType="com.itheima.mybatis.pojo.User"> <!-- select * from user where username like "%"#{haha}"%" --> select * from user where username like '%${value}%' </select> <!-- 添加用户 --> <insert id="insertUser" parameterType="com.itheima.mybatis.pojo.User"> <selectKey keyProperty="id" resultType="Integer" order="AFTER"> <!-- 查找新增用户的id --> select LAST_INSERT_ID() </selectKey> insert into user (username,birthday,address,sex) values (#{username},#{birthday},#{address},#{sex}) </insert> <!-- 更新 --> <update id="updateUserById" parameterType="com.itheima.mybatis.pojo.User"> update user set username = #{username},sex = #{sex},birthday = #{birthday},address = #{address} where id = #{id} </update> <!-- 删除 --> <delete id="deleteUserById" parameterType="Integer"> delete from user where id = #{vvvvv} </delete> </mapper>mybatisFirstTest.java
package com.itheima.mybatis.junit; 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 org.junit.Test; import com.itheima.mybatis.pojo.User; public class MybatisFirstTest { /* 1、根据全局配置文件创建sqlSessionFactory工厂对象 2、sql映射文件:配置了每一个sql,以及sql的封装规则 3、将sql映射文件注册到全局配置文件中 4、代码: 根据全局配置文件获取sqlSessionFactort 使用sqlSessionFactory获取sqlSession滴偶像哦昂,并且使用他进行增删改查操作 一个sqlSession代表和数据库的一次会话,用完需要关闭 用sql的唯一标示符来告诉mybatis使用哪一个sql,sql都是保存在sql映射文件爱你中 */ @Test public void testMybatis() throws Exception { //加载核心配置文件 String resource = "sqlMapConfig.xml"; InputStream in = Resources.getResourceAsStream(resource); //创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); //创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //执行Sql语句 //第一个参数:sql语句的标识符("test.findUserById":为了防止id值相同的情况下,采取namespace+唯一标示符) //第二个参数:执行sql语句要用的参数 try{ User user = sqlSession.selectOne("test.findUserById", 10); System.out.println(user); }finally{ //关闭session openSession.close(); } } //根据用户名称模糊查询用户列表 @Test public void testfindUserByUsername() throws Exception { //加载核心配置文件 String resource = "sqlMapConfig.xml"; InputStream in = Resources.getResourceAsStream(resource); //创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); //创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //执行Sql语句 List<User> users = sqlSession.selectList("test.findUserByUsername", "五"); for (User user2 : users) { System.out.println(user2); } } //添加用户 @Test public void testInsertUser() throws Exception { //加载核心配置文件 String resource = "sqlMapConfig.xml"; InputStream in = Resources.getResourceAsStream(resource); //创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); //创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //执行Sql语句 User user = new User(); user.setUsername("何炅"); user.setBirthday(new Date()); user.setAddress("sadfsafsafs"); user.setSex("男"); int i = sqlSession.insert("test.insertUser", user); //提交事务 sqlSession.commit(); //获取新增User的id System.out.println(user.getId()); } //更新用户 @Test public void testUpdateUserById() throws Exception { //加载核心配置文件 String resource = "sqlMapConfig.xml"; InputStream in = Resources.getResourceAsStream(resource); //创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); //创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //执行Sql语句 User user = new User(); user.setId(29); user.setUsername("何炅292929"); user.setBirthday(new Date()); user.setAddress("222222sadfsafsafs"); user.setSex("女"); int i = sqlSession.update("test.updateUserById", user); sqlSession.commit(); } //删除 @Test public void testDelete() throws Exception { //加载核心配置文件 String resource = "sqlMapConfig.xml"; InputStream in = Resources.getResourceAsStream(resource); //创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); //创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession.delete("test.deleteUserById", 29); sqlSession.commit(); } }