mybatis框架简单总结
实际使用大多是用到SqlSession对象,SqlSession对象通过SqlSessionFactory的openSession方法获得,然后基本上就是使用session对象的select,update,insert方法来对数据库进行增删查改,使用映射的sql语句需要改sql语句的完全限定名称,也就是<包名>.<id名>
sql映射文件
javabean
管理SQLSession类,这个没写好
mybatis是半自动orm框架,是一个映射sql语句的框架,没有hibernate功能那么强大,但是胜在轻便易上手,给我的感觉是JDBC的威力强化版,基本使用方法是
配置文件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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<!-- 下面的配置属性可以通过属性文件.protertys类进行配置,也可以写死 -->
<!-- 此处输入数据库驱动类 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- 此处输入数据库url -->
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybaitstest"/>
<!-- 此处输入用户名 -->
<property name="username" value="root"/>
<!-- 此处输入密码 -->
<property name="password" value="09043330"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- mybatis框架对应的映射文件,这些映射文件主要用来编写sql语句,映射一个java方法 -->
<mapper resource="mybatis/mybatisMapper.xml"/>
</mappers>
</configuration>
映射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="mybatis.example.PersonMap">
<!--
select标签,里面用于编写select语句,基本的属性有
id: 对应sql语句的唯一标识符,
paramterType: 对应输入的参数,mybaits可以推断输入的参数
resultType: 返回结果
resultMap: 外部map
其他属性暂时用不到,不太常用
-->
<select id="selectPerson" resultType="javabean.Person">
<!-- 使用#{}来标识sql语句中需要动态输入的变量 -->
select * from persons where id = #{id}
</select>
<!--
insert标签,用于编写用于映射的insert的sql语句,基本属性和select标签
类似。
-->
<insert id="insertPerson" parameterType="javabean.Person">
insert into persons(id,name,sex)
values (#{id},#{name},#{sex})
</insert>
<update id="updatePerson">
update persons set
name = #{name},
sex = #{sex}
where id = #{id}
</update>
<delete id="deletePerson">
delete from persons where id = #{id}
</delete>
</mapper>
实际使用
实际使用大多是用到SqlSession对象,SqlSession对象通过SqlSessionFactory的openSession方法获得,然后基本上就是使用session对象的select,update,insert方法来对数据库进行增删查改,使用映射的sql语句需要改sql语句的完全限定名称,也就是<包名>.<id名>
import java.io.*;
import java.util.*;
import org.apache.ibatis.builder.SqlSourceBuilder;
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 javabean.Person;
public class Manger {
private static SqlSessionFactory sqlSessionFactory;
public Manger() throws IOException {
String resource = "mybatis/mybatisConfiguration.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public Person selectone(int id) {
SqlSession session = sqlSessionFactory.openSession();
Person person = null;
try {
person = (Person)session.selectOne("mybatis.example.PersonMap.selectPerson",id);
}finally {
session.close();
}
return person;
}
public void insertone() {
SqlSession session = sqlSessionFactory.openSession();
Person p = new Person();
p.setId(1);
p.setName("sjm2");
p.setSex("男");
session.insert("mybatis.example.PersonMap.insertPerson", p);
session.commit();
}
public void updateone() {
SqlSession session = sqlSessionFactory.openSession();
Person p = new Person();
p.setId(0);
p.setName("znh");
p.setSex("女");
session.update("mybatis.example.PersonMap.updatePerson",p);
session.commit();
}
public static void main(String[] args) throws IOException {
Manger m = new Manger();
m.insertone();
System.out.println(m.selectone(1));
}
}
下面用mybatis框架写有关于一个用户注册,用户登录的功能。
sql映射文件
<?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="mybatis.usermapper">
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into users(name,password)
values(#{name},#{password})
</insert>
<select id="selectUserfromid" resultType="javabean.User">
select * from users where id = #{id}
</select>
<select id="selectUserfromname" resultType="javabean.User">
select * from users where name = #{name}
</select>
<update id="updateUserfromid">
update users set
name = #{name},
password = #{password}
where id = #{id}
</update>
</mapper>
servlet
package servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.ibatis.session.SqlSession;
import javabean.User;
import mybaitsManger.Manger;
import sun.rmi.server.Dispatcher;
@WebServlet("/register.servlet")
public class Register extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
req.setCharacterEncoding("utf-8");
String name = req.getParameter("name");
String password = req.getParameter("password");
SqlSession session = Manger.getSqlSessionFactory().openSession();
try {
User user = new User();
user.setName(name);
user.setPassword(password);
session.insert("mybatis.usermapper.insertUser",user);
session.commit();
}finally {
session.close();
}
HttpSession session1 = req.getSession();
session1.setAttribute("username", name);
RequestDispatcher dispatcher = req.getRequestDispatcher("/index.jsp");
dispatcher.forward(req, resp);
}
}
javabean
package javabean;
public class User {
private int id; // 主键,自增长
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
管理SQLSession类,这个没写好
package mybaitsManger;
import java.io.*;
import java.util.*;
import org.apache.ibatis.builder.SqlSourceBuilder;
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 javabean.Person;
public class Manger {
private static SqlSessionFactory sqlSessionFactory;
static{
String resource = "mybatis/mybatisConfiguration.xml";
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}
注册页面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="register.servlet" method="POST">
账户名:<input name="name" type="text" />
密码:<input name="password" type="password" />
<input value="提交" type="submit" />
</form>
</body>
</html>
首页
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Object name = session.getAttribute("username");
if(name!=null){
out.println("欢迎您"+name+"用户");
}else{
out.println("欢迎来到首页");
}
%>
</body>
</html>