config: source folder
1.jdbc.properties
链接数据库的配置文件:配置文件的作用:
MyBatis功能:连接数据库
在javaWeb中:
1、导jar包 mysql-connector-java-5.1.7-bin.jar(链接数据库功能的jar文件)
jar文件就是一个压缩包(里面有链接数据库的java代码)
2、a、加载驱动 b、 建立连接 c、Statment(能执行sql语句、增删改查CRUD) d、ResultSet(存放查询以后的结果集)
package utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MySqlUtil {
public static void main(String[] args) {
connMysql();
}
public static void connMysql() {
try {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//建立连接
//url: 数据库的地址
String url = "jdbc:mysql://localhost:3306/lucasdb?characterEncoding=utf-8";
//数据库的账户
String user = "root";
String password = "lucas";
Connection conn = DriverManager.getConnection(url, user, password);
String selectSql = "select * from student";
//Statment
Statement statement = conn.createStatement();
// statement.execute(selectSql);
//ResultSet
ResultSet resultSet = statement.executeQuery(selectSql);
System.out.println(resultSet);
while(resultSet.next()) {
String stuId = resultSet.getString(1);
String stuName= resultSet.getString(2);
String stuGender= resultSet.getString(3);
int stuAge= resultSet.getInt(4);
System.out.println("stuId:" + stuId + " stuName:" + stuName + " stuGender" + stuGender + " stuAge:" + stuAge);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
驱动、数据库的地址(url)、链接数据库的用户名、链接数据库的密码
jdbc.DriverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/lucasdb?characterEncoding=utf-8
jdbc.username=root
jdbc.password=lucas
2.
<typeAliases>: 类型 别名
<properties resource="jdbc.properties"></properties>
加载jdbc.properties这个文件,为下边<dataSource>代码用
<?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>
<properties resource="jdbc.properties"></properties>
<typeAliases>
<!-- <typeAlias type="neimingda.Student" alias="student"/> -->
<package name="neimingda"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.DriverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="dao"/>
</mappers>
</configuration>
实体类Student
package model;
//Bean 实体类/保存数据
public class Student {
//静态的属性
//性别 、 姓名 、 学号 、年龄
private String stuGender;
private String stuName;
private int stuId;
private int stuAge;
//getter、setter
public String getStuGender() {
return stuGender;
}
public void setStuGender(String stuGender) {
this.stuGender = stuGender;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public int getStuAge() {
return stuAge;
}
public void setStuAge(int stuAge) {
this.stuAge = stuAge;
}
@Override
public String toString() {
return "Student [stuGender=" + stuGender + ", stuName=" + stuName + ", stuId=" + stuId + ", stuAge=" + stuAge
+ "]";
}
}
MyBatis核心组件
SqlSessionFactoryBuilder(构造器)
SqlSessionFactory(工厂接口)
SqlSession: 会话(一个连接)
SQL Mapper 映射器 java接口+XML配置文件(注解)
面向接口编程、实现查询数据库
配置文件jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/lucasdb?characterEncoding=utf-8
jdbc.username=root
jdbc.password=lucas
person=child
接口:UserDao
package study2.dao;
import study2.model.Student;
public interface UserDao {
public Student findStudentById(int id);
}
接口的实现类UserDaoImpl
package study2.dao;
import study2.model.Student;
import utils.MysqlUtil;
public class UserDaoImpl implements UserDao {
@Override
public Student findStudentById(int id) {
//从数据库中根据id查询Student
MysqlUtil mysqlUtil = new MysqlUtil();
Student student = mysqlUtil.findStudentById(1);
return student;
}
}
工具包MysqlUtil
package utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import study2.model.Student;
public class MysqlUtil {
Connection conn = null;
//建立连接
public Connection getConn() throws Exception {
ReadFileUtil readFileUtil = new ReadFileUtil();
HashMap map = readFileUtil.getStreamFromFile();
Class.forName(map.get("driver").toString());
String password = map.get("password").toString();
String user = map.get("username").toString();
String url = map.get("url").toString();
conn = DriverManager.getConnection(url, user, password);
return conn;
}
//操作数据库、查询数据库
public Student findStudentById(int id) {
Student student = new Student();
try {
Connection conn = getConn();
// Statement statement = conn.createStatement();
String selSql = "select * from student where stuId = ?";
// Statement statement = conn.createStatement();
// ResultSet resultSet = statement.executeQuery(selSql);
PreparedStatement prepareStatement = conn.prepareStatement(selSql);
prepareStatement.setInt(1, id);
ResultSet resultSet = prepareStatement.executeQuery();
//在用resultSet取数据之前必须让cuser指针向下移动一下
if(resultSet.next()) {
int stuId = resultSet.getInt(1);
String stuName = resultSet.getString(2);
String stuGender = resultSet.getString(3);
int stuAge = resultSet.getInt(4);
student.setStuAge(stuAge);
student.setStuGender(stuGender);
student.setStuId(stuId);
student.setStuName(stuName);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return student;
}
}
ReadFileUtil
package utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Properties;
/**
* 读外部配置文件
* @author S
*
*/
public class ReadFileUtil {
public void getStreamFromFile(File file) throws IOException {
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
//读文件中的一行,BufferedReader中有读一行的功能
String readLine = bufferedReader.readLine();
while(readLine != null) {
System.out.println(readLine);
readLine = bufferedReader.readLine();
}
}
/**
* 对程序内部配置文件
* @return
* @throws IOException
*/
public HashMap getStreamFromFile() throws IOException {
HashMap map = new HashMap<String, String>();
InputStream resourceAsStream = ReadFileUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
//属性类、空的属性类
Properties props = new Properties();
props.load(resourceAsStream);
//属性类中就有内容了
//从props中取出内容的方式
String driver = props.getProperty("jdbc.driver");
String url = props.getProperty("jdbc.url");
String username = props.getProperty("jdbc.username");
String password = props.getProperty("jdbc.password");
map.put("driver", driver);
map.put("url", url);
map.put("username", username);
map.put("password", password);
return map;
}
}
测试类:
package study2.test;
import java.io.File;
import java.io.IOException;
import org.junit.Test;
import com.sun.org.apache.bcel.internal.classfile.SourceFile;
import study2.model.Student;
import utils.MysqlUtil;
import utils.ReadFileUtil;
public class TestClazz {
@Test
public void test1() {
MysqlUtil mysqlUtil = new MysqlUtil();
int stuId = 1;
Student student = mysqlUtil.findStudentById(stuId);
System.out.println(student);
}
@Test
public void test2() {
ReadFileUtil readFileUtil = new ReadFileUtil();
///ShiXun/src/jdbc.properties
// SourceFile
File file = new File("d:/jdbc.properties");
try {
readFileUtil.getStreamFromFile(file);
} catch (IOException e) {
e.printStackTrace();
}
}
}