JDBC总结
数据库连接的第二个参数: JDBC URL
如果是本机, 可直接简写为
jdbc:mysql:///cloud_study
JDBC常用API
ResultSet:
JDBC的游标
开启游标:
字符集设置避免中文乱码
命令行输入:
show variables like '%character%';
show create table goods;
解决SQL注入
注意事项
Mybatis入门程序
引入Mybatis
Mybatis是作用在持久层的轻量级的框架,该框架要求程序员将大部分的精力放在sql语句的编写上面, 是一种半自动的sql编写方式。主要适用于需求变化比较多的项目。
为什么要用框架:
1.在jdbc中很多地方有用到硬编码,比如sql语句 ,在mybatis中将sql语句编写在xml文件中
2.在jdbc中对于映射关系处理的不好。对于查询 jdbc返回的就是一个ResultSet对象,mybatis提供了多种映射关系,可以直接获得我们想要的各种类型的结果
3.对于dao层编写, 必须在dao层的实现类编写jdbc代码, 但是mybatis提供了一种方式叫做Mapper代理开发模式,在这种模式下, 对于dao层 我们只需要编写接口, 不需要编写实现类!
导入jar包:
整个项目结构:
整个配置文件的配置:
创建mybatis的全局配置文件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>
<!-- 在控制台输出日志信息 -->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- environments 里面的内容在mybatis和spring整合以后, 就全部没了 -->
<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:///mybatis_day01"/>
<property name="username" value="root"/>
<property name="password" value="lxy"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 将映射文件加载到全局配置文件 -->
<mapper resource="mybatis/user.xml"/>
</mappers>
</configuration>
创建mybatis的映射文件user.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="demo">
<!--
id:代表这条sql语句, 在SqlSession调用方法的时候, 需要该id作为参数进行传递, 在整个文件中不能重复
parameterType: 参数的类型
resultType:User
#{}:这是个占位符, 如果参数是简单类型(基本类型+String), 那么里面可以随便写.
-->
<select id="findUserById" parameterType="int" resultType="com.wtu.mybatis.User">
select * from `user` where id = #{id}
</select>
</mapper>
创建日志配置文件log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
根据用户表, 创建User实体类
package com.wtu.mybatis;
import java.util.Date;
/**
* @Author menglanyingfei
* @Created on 2018.01.18 16:28
*/
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", birthday="
+ birthday + ", sex=" + sex + ", address=" + address + "]";
}
}
测试类:
操作步骤:
1.怎样获得SqlSession
对象 <– SqlSessionFactory
<–SqlSessionFactoryBuilder
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
builder.read(in);
- 为了让我们能够看清楚执行过程,我们使用log4j的配置文件用来输出日志信息
package com.wtu.mybatis;
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 java.io.InputStream;
/**
* @Author menglanyingfei
* @Created on 2018.01.18 16:29
*/
public class MybatisDemo {
@Test
public void findUserById() throws Exception {
// 得到MyBatis全局配置文件的输入流对象
InputStream in = Resources.getResourceAsStream("mybatis/sqlMapConfig.xml");
// 得到SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 得到SqlSession对象
SqlSession session = factory.openSession();
// 根据id查询用户
/*
param1: 映射文件中的sql id 格式是命名空间.sqlID
param2: 查询语句需要带的参数
*/
User user = session.selectOne("demo.findUserById", 10);
System.out.println(user);
}
}
测试成功结果:
完整代码见Github地址
https://github.com/menglanyingfei/SSMLearning/tree/master/mybatis_day01