MyBatis入门

MyBatis介绍

MyBatics是对持久化对象的操作自动转换为关系数据库的操作。
也就是在关系型数据库和对象之间作一个映射。
注:对象持久化就是将对象存储在可持久保存的存储介质上,例如主流的关系数据库中。


MyBatis环境搭建

  • 需要引入Jar包:
    1. Mybatis的jar包
    2. mysql-connector-java.jar (mysql的JDBC驱动包)。
  • 配置
    SqlSessionFactory 的全局配置⽂件,⽂件名为conf。配置数据库的连接信息。
    注意: 该⽂件需要放在根目录下,即src/main/java目录下⾯。
<?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" 和 type="manager" 两种选择 -->
	 	 	 <!-- type="jdbc" 直接使用JDBC的事务提交和回滚来设置的 -->
	 	 	 <!-- type="manager" 对事务提交和回滚不做任何事情,要交给外部的容器(比如spring) -->
			 <transactionManager type="jdbc" />
			 <!-- 配置数据库连接信息 -->
			 <dataSource type="POOLED">
				 <property name="driver" value="com.mysql.jdbc.Driver" />
				 <property name="url" value="jdbc:mysql://localhost/
cloud_study" />
				 <property name="username" value="root" />
				 <property name="password" value="123456" />
			 </dataSource>
	 	 </environment>
</environments>
</configuration>

MyBatis的使用

1.创建JavaBean对象

例如:创建一个user对象。

package com.micro.profession.mybatis;
public class User {
	private int id;
	private String userName;
	private String corp;	//corporation
	public User(Integer id, String userName, String corp) {
		 	 this.id = id;
		 	 this.userName = userName;
		 	 this.corp = corp;
	}
	public User(String userName, String corp) {
		 	 this.userName = userName;
		 	 this.corp = corp;
	}
	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 getCorp() {
		 	 return corp;
	}
	public void setCorp(String corp) {
		 	 this.corp = corp;
	} 
}

2. 构建对象的操作接口

Mybatis 是用对象的操作与关系型数据库的sql语句进行映射的。
例如:

package com.micro.profession.mybatis;
public interface GetUserInfo {
	public User getUser(int id);
}

3.创建Java对象和sql语句映射关系配置文件(mapper文件)。

<?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是操作接口的路径名 --> 
<mapper namespace="com.micro.profession.mybatis.GetUserInfo"> 
	<!-- id是操作接口的方法名   parameterType是操作方法接受的参数类型   resultType是结果的类型-->
	<select id="getUser" parameterType="int"
		 	 resultType="com.micro.profession.mybatis.User">
		 	 select id ,userName,corp from user where id =#{id}
	</select>
</mapper>

编写mapper文件完成之后,需要添加在主配置SqlSessionFactory中:在mappers中添加mapper。

<?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/
	cloud_study" />
					 <property name="username" value="root" />
					 <property name="password" value="123456" />
				 </dataSource>
		 	 </environment>
	</environments> 
	<!-- 将mapper的文件路径添加在mappers中。 -->
	<!-- mapper的resource属性的值,要使⽤斜线/作为分隔符,使⽤“.”系统可能⽆法识别。 -->
	<mappers>
		 	 <mapper resource="com/micro/profession/mybatis/userMapper.xml" />
	</mappers>
</configuration>

4.最后一步,构建基于MyBatis的应⽤读取数据

package com.micro.profession.mybatis;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class HelloMyBatis {
	public static void main(String[] args) {
		 	 //1. 声明配置⽂件的目录
		 	 String resource = "conf.xml";
		 	 //2. 加载应⽤配置⽂件
		 	 InputStream is = HelloMyBatis.class.getClassLoader()
					 .getResourceAsStream(resource);
		 	 // 3. 创建SqlSessonFactory
		 	 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
					 .build(is);
		 	 // 4. 获取Session
		 	 SqlSession session = sessionFactory.openSession();
		 	 try {
				 // 5. 获取操作类
				 GetUserInfo getUserInfo = session.getMapper(GetUserInfo.class);
				 // 6. 完成查询操作
				 User user = getUserInfo.getUser(11);
				 System.out.println(user.getId() + " " + user.getUserName() + " "+ user.getCorp());
		 	 } finally {
				 // 7.关闭Session
				 session.close();
		 	 } 
		 } 
}

注意:

  1. resource的值必须与之前定义的SqlSessionFactory⽂件名称完全⼀致,conf。
  2. getUserInfo.getUser(11),是获取数据库中id为11的数据⾏记录,需要确保数据库中已
    经有id为11的数据库记录,否则可能会抛null pointer异常。

Mybatis的增删改查

接口类的定义:

package com.micro.profession.mybatis;
public interface UserOp {
	 	
	public void addUser(User user);
	public void updateUser(User user);
	public void deleteUser(int id);
	public User getUser(int id);
}

mapper配置

<?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.micro.profession.mybatis.UserOp"> 
	<insert id="addUser" parameterType="com.micro.profession.mybatis.User"
		 	 useGeneratedKeys="true" keyProperty="id">
		 	 insert into user (userName,corp)
		 	 values(#{userName},#{corp})
	</insert> <select id="getUser" parameterType="int"
		 	 resultType="com.micro.profession.mybatis.User">
		 	 select id ,userName,corp from user where id =#{id}
	</select> <update id="updateUser" parameterType="com.micro.profession.mybatis.User">
		 	 update user set userName =
		 	 #{userName} , corp = #{corp}
		 	 where id = #{id}
	</update> <delete id="deleteUser" parameterType="com.micro.profession.mybatis.User">
		 	 delete from user
		 	 where id =
		 	 #{id}
	</delete>
</mapper>
package com.micro.profession.mybatis;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class HelloMyBatisMoreOp {
public static void main(String[] args) {
	 	 moreOp();
}
public static void moreOp() {
	 	 // 1. 声明配置⽂件
	 	 String resource = "conf.xml";
	 	 // 2. 加载应⽤配置⽂件
	 	 InputStream is = HelloMyBatisMoreOp.class.getClassLoader()
				 .getResourceAsStream(resource);
	 	 // 3. 创建SqlSessonFactory
	 	 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
				 .build(is);
		//mybatis是自动以事务提交的,我们需要显示的调用, 我们可用下面这句话,将事务提交给关闭掉。
	 	 SqlSession session = sessionFactory.openSession(true);
	 	 try {
			 // 5. 获取操作类
			 UserOp userOp = session.getMapper(UserOp.class);
			 User user = new User("XiaoMing", "Netease");
			 // 插⼊⽤户
			 userOp.addUser(user);
			 System.out.println(user.getId());
			 // 查询⽤户
			 user = userOp.getUser(user.getId());
			 System.out.println("userId:" + user.getId() + ", userName:"
					 + user.getUserName() + ", corp:" + 
user.getCorp());
			 user.setUserName("LiMing");
			 // 更新⽤户
			 userOp.updateUser(user);
			 // 删除⽤户
			 userOp.deleteUser(user.getId());
	 	 } finally {
			 // 7.关闭Session
			 session.close();
	 	 } } }

我们可以通过注解的方式代替之前的映射文件mapper。

在操作对象的操作方法上编写注解:
例如:

package com.micro.profession.mybatis;
public interface GetUserInfo {
	@Select("select * from user where id = #{id} ")
	public User getUser(int id);
}

这样就不需要在编写mapper文件了。

但是我们需要在代码中指定映射关系。
需要在(3. 创建SqlSessonFactory)添加下面这两句:
configuration conf = sessionFactory.getConfiguration(); //获取配置
conf.addMapper(GetUserInfo.class); //添加对应的类的CLASS对象

package com.micro.profession.mybatis;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class HelloMyBatis {
	public static void main(String[] args) {
		 	 //1. 声明配置⽂件的目录
		 	 String resource = "conf.xml";
		 	 //2. 加载应⽤配置⽂件
		 	 InputStream is = HelloMyBatis.class.getClassLoader()
					 .getResourceAsStream(resource);
		 	 // 3. 创建SqlSessonFactory
		 	 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
					 .build(is);
			configuration conf = sessionFactory.getConfiguration();
			conf.addMapper(GetUserInfo.class);
		 	 // 4. 获取Session
		 	 SqlSession session = sessionFactory.openSession();
		 	 try {
				 // 5. 获取操作类
				 GetUserInfo getUserInfo = session.getMapper(GetUserInfo.class);
				 // 6. 完成查询操作
				 User user = getUserInfo.getUser(11);
				 System.out.println(user.getId() + " " + user.getUserName() + " "+ user.getCorp());
		 	 } finally {
				 // 7.关闭Session
				 session.close();
		 	 } 
		 } 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值