MyBatis框架入门

前言JDBC

1.什么是JDBC

JDBC(Java DataBase Connectivity) Java数据库连接
其实就是利用Java语言(Java程序)连接并访问数据库的一门技

2. JDBC代码实现

public class JdbcDemo {
	public static void main(String[] args) throws Exception {
		//注册驱动
		Class.forName("com.mysql.cj.jdbc.Driver");
		//获取连接
		Connection conn = DriverManager.getConnection(
			"jdbc:mysql:///yonghedb?charcaterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false",
			"root","root");
		System.out.println("连接成功");
		//获取传输
		Statement stat = conn.createStatement();
		//执行sql,返回结果
		ResultSet rs = stat.executeQuery("select * from emp");
		//遍历rs对象中的数据,将每一条数据封装为一个Emp对象,放在List集合中
	
		List<Emp> list = new ArrayList<Emp>();
		Emp emp=null;
		while(rs.next()) {
			int id=rs.getInt("id");
			String name=rs.getString("name");
			String job=rs.getString("job");
			double salary=rs.getDouble("salary");
		//将当前遍历的这条记录封装到emp对象中
		emp=new Emp();
		emp.setId(id);
		emp.setName(name);
		emp.setJob(job);
		emp.setSalary(salary);
		//将封装好数据的emp对象存到list集合中
		list.add(emp);
		}
		//打印list集合中数据对象
		for (Emp e : list) {
			System.out.println(e);
		}
	
		//6释放资源
			rs.close();
			stat.close();
			conn.close();
	}
}

MyBatis框架

1.什么是MyBatis

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,简化了JDBC代码,解决JDBC将结果集封装为Java对象的麻烦。

2.代码实现

2.1 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>com.test</groupId>
  <artifactId>Mybatis</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
	    <!-- junit单元测试 -->
	    <dependency>
	        <groupId>junit</groupId>
	        <artifactId>junit</artifactId>
	        <version>4.9</version>
	    </dependency>
	    <!-- mysql驱动 -->
	    <dependency>
	        <groupId>mysql</groupId>
	        <artifactId>mysql-connector-java</artifactId>
	        <version>8.0.11</version>
	    </dependency>
	    <!-- mybatis -->
	    <dependency>
	        <groupId>org.mybatis</groupId>
	        <artifactId>mybatis</artifactId>
	        <version>3.2.8</version>
	    </dependency>
	    <!-- 整合log4j -->
	    <dependency>
	        <groupId>org.slf4j</groupId>
	        <artifactId>slf4j-log4j12</artifactId>
	        <version>1.6.4</version>
	    </dependency>
	</dependencies>
</project>

2.2 mybatis-config.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">
    
<!-- MyBatis的全局配置文件 -->
<configuration>
  <!--配置开发环境  -->
  <environments default="dev">
  	<environment id="dev">
  		<!--配置事物管理 JDBC:将事物交给JDBC管理-->
  		<transactionManager type="JDBC"></transactionManager>
  		<!--配置连接池信息 -->
  		<dataSource type="POOLED">
  			<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  			<property name="url" value="jdbc:mysql:///yonghedb?characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai&amp;useSSL=false"/>
  			<property name="username" value="root"/>
  			<property name="password" value="root"/>
  		</dataSource>
  	</environment>
  </environments>
  <!--导入XxxxMapper文件-->
  <mappers>
  	<mapper resource="EmpMapper.xml"/>
  </mappers>
</configuration>

2.3 EmpMapper.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">
<!-- 通过namespace值+id值可以定位要执行的是哪条sql语句-->
<mapper namespace="cn.tedu.dao.EmpMapper">
  <!--查询-->
  <select id="findAll" resultType="cn.tedu.pojo.Emp">
  	select * from emp
  	select ${colName} from emp
  </select>
  <!--新增-->
  <insert id="insert">
  	insert into emp value(null,#{name},#{job},#{salary})
  </insert>
  <!--更新-->
  <update id="update">
  	update emp set job=#{job},salary=#{salary} where name=#{name}
  </insert>
  <!--删除-->
  <delete id="delete">
  delete from emp where id=#{id}
  </delete>
</mapper>

2.4 编辑log4j.properties日志文件:

# Global logging configuration
log4j.rootLogger=DEBUG, Console,LOGFILE
# Console output...
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%5p [%t] %d{yyyy-MM-dd hh:mm:ss}- %m%n

log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.file=./mylog.log
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%5p [%t] %d{yyyy-MM-dd hh:mm:ss}- %m%n

2.5 编辑接口EmpMapper代码

public interface EmpMapper {
	public List<Emp> findAll();
	public void insert(Map map);
	public void update(Emp emp);
	public void delete(Integer id);
}

2.6 编辑测试类实现代码

//mybatis增删改查--通过接口EmpMapper.class
public class MybatisDemo {
	SqlSession session=null;
	//@Before标记的方法会在每个@Test标记的方法之前执行
	@Before
	public  void beforeMethod() throws Exception {
		//1读取mybatis核心配置文件中的配置信息(mybatis-config.xml)
		InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
		//基于上面读取的配置信息获取SqlSessionFactory对象(工厂)
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
		//通过工厂对象打开与数据库的连接(即通过工厂对象获取SqlSession对象)
		 session = factory.openSession(true);//true自动提交事物
	}
	//测试查询
	@Test
	public void testFindAll() {
		//获取EmpMapper接口的子类(由mybatis提供)的对象实例
		EmpMapper mapper = session.getMapper(EmpMapper.class);
		List<Emp> list = mapper.findAll();
		for (Emp emp : list) {
			System.out.println(emp);
		}
	}
	//测试新增	
	@Test
	public void testInsert() {
		EmpMapper mapper = session.getMapper(EmpMapper.class);
		Map map= new HashMap();
		map.put("name","李思");
		map.put("job","程序员");
		map.put("salary","25000");
		mapper.insert(map);
		}
	//测试修改
	@Test
	public void testUpdate() {	
		EmpMapper mapper = session.getMapper(EmpMapper.class);
		Emp emp =new Emp();
		emp.setName("张三");
		emp.setJob("董事长");
		emp.setSalary(35000d);
		mapper.update(emp);	
		}
	//测试删除
	@Test
	public void testDelete() {
	EmpMapper mapper = session.getMapper(EmpMapper.class);
	mapper.delete(52);
	}	
}

3. 知识点

resultType属性:从这条SQL语句中返回所期望类型的类的完全限定名称(包名+类名)。

resultMap属性:复杂对象结构(例如多表关联查询等)。 使用 resultType 或 resultMap,但不能同时使用。

mybatis中的占位符: #{}和 ${}

#{}:在参数值传过来替换占位符的同时,会进行转义处理(在字符串或日期类型的值的两边加上单引号);
select * from emp where name=Xxx; – 错误
select * from emp where name=‘Xxx’; – 正确
${}:是为SQL片段(字符串)进行占位,将传过来的SQL片段直接拼接在 ${} 占位符所在的位置,不会进行任何的转义处理。
(由于是直接将参数拼接在SQL语句中,因此可能会引发SQL注入攻击问题)
select ${columns} from emp
拼接之后:select id,name,job from emp
需要注意的是,在传递 ${} 对应的值时,即使只有一个参数,也需要将值存入map集合中!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值