此项目不是maven项目,也是创建Dynamic Web Project
两种开发方式:Dao开发方式,Mapping代理开发方式
使用原始dao开发的缺点就是只能通过selectOne或者selectList等操作,而不是直接调用映射配置文件中的方法,不能一目了然。
本文为Mapping代理开发方式。
mybatis,有两个配置文件
全局配置文件SqlMapConfig.xml(配置数据源,全局变量,加载映射文件等东西)
映射文件xxxMapper.xml,用来对输入参数输出参数,数据库语句做配置的。
mybatis配置好之后的使用步骤
1、获取sqlMapConfig.xml的位置然后进行加载
2、通过sqlMapConfig.xml中的内容创建出sqlsessionFactory对象
3、然后通过sqlsessionFactory对象创建出sqlsession对象
4、有了sqlsession对象就可以进行相应的操作了。
工程目录:
步骤:
前置:创建数据库,数据表,添加数据。
1.添加jar (WebContent/WEB-INF/lib目录下添加)
2.pojo [User.java](添加到数据里各个数据的get/set方法)
3.设置mybatis配置文件 [conf.xml] (直接放置在src下,不需要放包下)
4.配置数据表的映射文件 [UserMapping.xml]
5.Dao接口类 [IUserOperaton.java]
6.实现方法 [Test.java]
具体:
前置:
create database mybatis;
create table user(
id int primary key auto_increment,
name varchar(20),
age int);
1.添加jar
只需添加两个jar: mybatis-3.4.5.jar 和 mysql-connector-java-5.5.10.bin.jar
一个是mybatis核心包,另一个是mysql驱动包
2.pojo
public class User {
private int id;
private String name;
private int age;
..省略get/set语句..
}
3.设置mybatis配置文件conf.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>
<!-- 定义别名 -->
<typeAliases>
<!-- 单个别名的定义 : type:别名映射的类型 ,alias:别名-->
<!-- <typeAlias type="com.mybatis.test.User" alias="user"/> -->
<!-- 批量别名定义 : 指定包路径,自动扫描包下边的pojo,定义别名,别名默认为类名(首字母小写或大写) -->
<package name="com.mybatis.test"/>
</typeAliases>
<environments default="development">
<environment id="development">
<!--使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<!-- 连接指定数据库 -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="zhan98910ABCD"/>
</dataSource>
</environment>
</environments>
<!-- mybatis的mapper文件,每个xml配置文件对应一个接口 -->
<mappers>
<mapper resource="com/mybatis/mapping/UserMapping.xml"/>
</mappers>
</configuration>
4.定义数据表的映射文件(一般命名为:表名+Mapping)
名字与配置文件conf.xml里<mappers>相对应
<?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">
<!-- 定义user表的映射文件 -->
<!-- 为mapper指定唯一的namespace,一般设置为包名+sql映射文件名 -->
<mapper namespace="com.mybatis.test.IUserOperaton">
<!--
id属性是唯一的,不能重复
parameterType:查询时使用的参数类型
resultType:查询返回的结果集类型
-->
<select id="SelectAll" parameterType="com.mybatis.test.User" resultType="User">
select * from user
</select>
<select id="SelectById" parameterType="int" resultType="com.mybatis.test.User">
select * from user where id = #{id}
</select>
<select id="SelectByName" parameterType="String" resultType="com.mybatis.test.User">
select * from user where name = #{name}
</select>
<update id="UpdateUser" parameterType="com.mybatis.test.User">
update user set name = #{name},age = #{age} where id = #{id}
</update>
<!--
useGeneratedKeys="true"表明要MyBatis获取由数据库自动生成的主键;
keyProperty="id"指定把获取到的主键值注入到User的id属性
-->
<insert id="InsertUser" parameterType="com.mybatis.test.User" useGeneratedKeys="true" keyProperty="id">
insert into user(name,age) values(#{name},#{age})
</insert>
<delete id="DeleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
</mapper>
5.Dao接口类
package com.mybatis.test;
import java.util.List;
//所有的接口名与UserMapping的id名对应
public interface IUserOperaton {
public List<User> SelectAll();
public User SelectById(int id);
public List<User> SelectByName(String name);
public void UpdateUser(User user);
public void InsertUser(User user);
public void DeleteUser(int id);
}
6.实现方法,测试
package com.mybatis.test;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
//所有方法名为实现IUserOperaton接口
public class Test {
//private static InputStream inputStream;
private static Reader reader;
private static SqlSessionFactory sqlSessionFactory;//会话工厂
static {
try {
//配置文件conf.xml
String resource= "conf.xml";
//inputStream = Resources.getResourceAsStream(resource);
reader = Resources.getResourceAsReader(resource);
//创建会话工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void getUserAll() {
// 通过工厂得到SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//创建代理对象
IUserOperaton iUserOperaton = session.getMapper(IUserOperaton.class);
List<User> users = iUserOperaton.SelectAll();
for(User user : users) {
System.out.println("id is = " + user.getId() + "name is = " + user.getName() + ",age is = " + user.getAge());
}
}finally {
session.close();
}
}
public void getUserById(int id) {
// 通过工厂得到SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//创建代理对象
IUserOperaton iUserOperaton = session.getMapper(IUserOperaton.class);
User user = iUserOperaton.SelectById(id);
System.out.println("name is = " + user.getName() + ",age is = " + user.getAge());
}finally {
session.close();
}
}
public void getUserByName(String name) {
// 通过工厂得到SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//创建代理对象
IUserOperaton iUserOperaton = session.getMapper(IUserOperaton.class);
List<User> users = iUserOperaton.SelectByName(name);
for(User user : users) {
System.out.println("name is = " + user.getName() + ",age is = " + user.getAge());
}
}finally {
session.close();
}
}
public void updateUser() {
// 通过工厂得到SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//创建代理对象
IUserOperaton iUserOperaton = session.getMapper(IUserOperaton.class);
User user = iUserOperaton.SelectById(3);
if(user != null) {
user.setName("three");
iUserOperaton.UpdateUser(user);
session.commit();
}
}finally {
session.close();
}
}
public void deleteUser(int id) {
// 通过工厂得到SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//创建代理对象
IUserOperaton iUserOperaton = session.getMapper(IUserOperaton.class);
iUserOperaton.DeleteUser(id);
session.commit();
}finally {
session.close();
}
}
public void insertUser() {
User user = new User();
user.setName("two");
user.setAge(33);
// 通过工厂得到SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
//创建代理对象
IUserOperaton iUserOperaton = session.getMapper(IUserOperaton.class);
iUserOperaton.InsertUser(user);
session.commit();
System.out.println("userid:" + user.getId());
}finally {
session.close();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test = new Test();
test.getUserAll();
test.getUserById(3);
test.getUserByName("two");
test.insertUser();
test.updateUser();
test.deleteUser(3);
}
}