mybatis

@[toc]

mybatis概念

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

mybatis和hibernate的比较

mybatishibernate
半自动化ORM框架全自动ORM框架
必须写SQL可以不写SQL
事务处理事务处理
缓存支持缓存都支持,二级缓存比mybatis好

案例

1、创建Maven(类型是jar)

在这里插入图片描述

2、添加对象的jar
<dependencies>
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.4.6</version>
	</dependency>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.27</version>
	</dependency>
</dependencies>

3、创建全局配置文件

在这里插入图片描述

<?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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/demo?characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value="1234"/>
      </dataSource>
    </environment>
  </environments>
  	<mappers >
  		<mapper resource="com/sxt/bean/UserMapper.xml"/>
  	</mappers>
</configuration>

4、定义User对象

在这里插入图片描述

5、创建映射文件
<?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="com.sxt.bean.User">
  		<select id="qeury" resultType="com.sxt.bean.User">
  			select * from t_user
  		</select>
  </mapper>
6、将映射文件添加到主配置文件中

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190425101945674.png

	<mappers >
  		<mapper resource="com/sxt/bean/UserMapper.xml"/>
  	</mappers>
7、测试
@Test
	public void test() throws IOException {
		// 加载配置文件
		InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
		// 获取SqlSessionFactory
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
		// 获取sqlsession对象
		SqlSession session = factory.openSession();
		// namespace+id 定位要执行的sql语句
		List<User> list = session.selectList("com.sxt.bean.User.qeury");

		for (User user : list) {
			System.out.println(user);
		}
		session.close();
	}

在这里插入图片描述

增、删、修改操作
映射文件设置
<mapper namespace="com.sxt.bean.User">
  		<select id="qeury" resultType="com.sxt.bean.User">
  			select * from t_user
  		</select>
  		<insert id="insert" parameterType="com.sxt.bean.User">
  			insert into t_user(username,password) values(#{username},#{password})
  		</insert>
  		<update id="update" parameterType="com.sxt.bean.User">
  			update t_user set username=#{username},password=#{password} where id=#{id}
  		</update>
  		<delete id="delete">
  			delete from t_user where id=#{id}
  		</delete>
  </mapper>

案例优化

1.获取SqlSessionFactory对象的方式
public class Dbutils {
	public static SqlSession getsession() {
		try {
			InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
			SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
			return factory.openSession();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
}
整理CRUD
package com.sxt.dao;

import java.util.List;

import com.sxt.bean.User;

public interface IUserDao {
	public List<User> query();

	public int insert(User user);

	public int update(User use);

	public int delete(Integer  id);
}


public class UserDaoImpl extends Dbutils implements IUserDao {

	@Override
	public List<User> query() {
		
		return getsession().selectList("com.sxt.bean.User.qeury");
	}

	@Override
	public int insert(User user) {
		// TODO Auto-generated method stub
		return getsession().insert("com.sxt.bean.User.insert", user);
	}

	@Override
	public int update(User user) {
		// TODO Auto-generated method stub
		return getsession().update("com.sxt.bean.User.update", user);
	}

	@Override
	public int delete(Integer id) {
		// TODO Auto-generated method stub
		return getsession().delete("com.sxt.bean.User.delete",id);
	}

}

再次整理

把映射配置放在dao层 在这里插入图片描述

public interface IUserDao {
	public List<User> query();

	public int insert(User user);

	public int update(User use);

	public int delete(Integer  id);
}

@Test
	public void test() {
		IUserDao dao=(IUserDao) Proxy.newProxyInstance(
				test.class.getClassLoader(), 
				new Class[]{IUserDao.class}, 
				new InvocationHandler() {
					
					@Override
					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						SqlSession session = Dbutils.getsession();
						if ("query".equals(method.getName())) {
							//查询
							return session.selectList("com.sxt.dao.IUserDao."+method.getName());
						}
						return null;
					}
				}
				);
		List<User> list = dao.query();
		for (User user : list) {
			System.out.println(user);
		}
		//dao.delete(4);
	}

在这里插入图片描述

使用 Mapper接口

@Test
	public void test() {
		SqlSession session = Dbutils.getsession();
		IUserDao userDao = session.getMapper(IUserDao.class);
		List<User> list = userDao.query();
		for (User user : list) {
			System.out.println(user);
		}
	}

使用mapper注意事项

序号注意点
1映射文件的namespace的值必须是接口的全路径名称 比如:com.dpb.dao.UserMapper
2接口中的方法名在映射文件中必须有一个id值与之对应。
3映射文件的名称必须和接口的名称一致

转载于:https://my.oschina.net/u/4116634/blog/3042495

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值