1.MyBatis

一.ORM思想

  1. 对象关系映射(Object Relational Mapping,简称ORM):
    1. 是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。

二.ORM框架

目前流行的ORM框架:

  1. JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现.
  2. Hibernate:目前最流行的ORM框架.设计灵巧,性能优秀,文档丰富.
  3. MyBatis:本是apache的一个开源项目iBatis,提供的持久层框架包括SQL Maps和DAO,允许开发人员直接编写SQL.等

三.MyBatis

  1. MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架,严格上说应该是一个SQL 映射框架。
  2. MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。
  3. MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Ordinary Java Objects,普通的 Java 对象)映射成数据库中的记录。
  • MyBatis的前身是iBatis,MyBatis在iBatis的基础上面,对代码结构进行了大量的重构和简化;

四.MyBatis的CURD

目录结构

image

SQL

image

DAO实现类UserDAOImpl

public class UserDAOImpl implements IUserDAO<User> {
	private String getStatement(String id) {
		return "dusk.mapper.UserMapper." + id;
	}

	public void save(User t) {

		// 3:获取session对象
		SqlSession session = MyBatisUtil.getSession();
		// 4:执行操作
		session.insert(getStatement("save"), t);
		// 5:提交事务
		session.commit();
		// 6:关闭资源
		session.close();

	}

	public void update(User t) {
		SqlSession session = MyBatisUtil.getSession();
		session.update(getStatement("update"),t);
		session.commit();
		session.close();
	}

	public void delete(Long id) {
		SqlSession session = MyBatisUtil.getSession();
		session.delete(getStatement("delete"),id);
		session.commit();
		session.close();
	}

	public User query(Long id) {
		SqlSession session = MyBatisUtil.getSession();
		User user = session.selectOne(getStatement("get"),id);
		session.commit();
		session.close();
		return user;
	}

	public List<User> list() {
		SqlSession session = MyBatisUtil.getSession();
		List<User> list = session.selectList(getStatement("list"));
		session.commit();
		session.close();
		return list;
	}

}

DAO接口

public interface IUserDAO<T> {
	void save(T t);
	void update(T t);
	void delete(Long id);
	T query(Long id);
	List<T> list();
}

实体类User

@Setter@Getter@ToString
@AllArgsConstructor
@NoArgsConstructor
public class User {
	private Long id;
	private String username;
	private String password;
	private Integer age;
}

实体Mapper配置UserMapper.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="dusk.mapper.UserMapper">
	<!-- resultMap:自定义的映射方式 type:一行数据封装成什么对象 -->
	<resultMap type="User" id="baseMap">
		<!-- property:类中的属性名,column表中的列明 -->
		<id property='id' column='uid' />
		<result property='username' column='uusername' />
		<result property='password' column='upassword' />
		<result property='age' column='uage' />
	</resultMap>
	
	<insert id="save" useGeneratedKeys="true" keyProperty="id"
		parameterType="User">
		insert into
		t_user(username,password,age)
		values(#{username},#{password},#{age})
	</insert>
	<update id="update" parameterType="User">
		update
		t_user set
		username=#{username},password=#{password},age=#{age}
		where
		id=#{id}
	</update>
	<delete id="delete" parameterType="long">
		delete from
		t_user where
		id=#{id}
	</delete>
	<select id="get" parameterType="long" resultType="User"
		resultMap="baseMap">
		select id uid, username uusername, password upassword, age
		uage from
		t_user where id =#{id}
	</select>
	<select id="list" resultType="User">
		select * from
		t_user
	</select>
</mapper>

测试类App

public class App {
	IUserDAO<User> bean = new UserDAOImpl();
	@Test
	public void testSave() throws Exception {
		bean.save(new User(null,"栗子球","2343",23));
	}
	@Test
	public void testUpdate() throws Exception {
		bean.update(new User(2L,"彩翼栗子球","23231",341));
	}
	@Test
	public void testDelete() throws Exception {
		bean.delete(12L);
	}
	@Test
	public void testGet() throws Exception {
		User user = bean.query(2L);
		System.out.println(user);
	}
	@Test
	public void testList() throws Exception {
		List<User> list = bean.list();
		for (User user : list) {
			System.out.println(user);
		}
	}

}

MyBatis工具类MyBatisUtil

public class MyBatisUtil {
	private static SqlSessionFactory factory;
	private MyBatisUtil() {}
	
	static {
		try {
			InputStream in = Resources.getResourceAsStream("mybatis.xml");
			factory = new SqlSessionFactoryBuilder().build(in);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static SqlSession getSession() {
		SqlSession session = factory.openSession();
		System.out.println(session);
		return session;
	}
}

数据库连接资源文件druid.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///dusk
username=root
password=admin

MyBatis日志打印配置文件log4j.properties

#全局的日志配置
log4j.rootLogger=ERROR,stdout
#MyBatis的日志配置,打印哪些名称空间开头的日志
log4j.logger.dusk.mapper=TRACE
#打印日志的地方
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

mapper管理文件mybatis.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>
	<!-- 往框架中注册属性 必须放在configuration下面第一行 -->
	<properties resource="druid.properties" />
	<!-- 往框架中注册别名 -->
	<typeAliases>
		<!-- 注册一个别名 type:类型的全限定名 alias:该全限定名 <typeAlias type="dusk.domain.User" 
			alias="User"/> -->
		<package name="dusk.domain" />
	</typeAliases>
	<!-- 配置环境 -->
	<environments default="default">
		<environment id="default">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${driverClassName}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
	<!-- 管理映射文件 -->
	<mappers>
		<mapper resource="dusk/domain/UserMapper.xml" />
	</mappers>
</configuration>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值