之前的很多代码中链接数据库都采用的是jdbc的版本,在项目开发过程中目前都采用mybatis完成链接数据库的操作
下面,我们来介绍如何使用mybatis链接数据库
1.先展示注解的写法(俩种方法配置的核心文件都是一样的)
首先配置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">
<configuration>
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<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://localhost:3306/luntan" />
<property name="username" value="root" />
<property name="password" value="mysql" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="it.com.db.IUsersMapper"/><!--路径,也可以用resource写的是斜杠类型的路径-->
</mappers>
</configuration>
SF.java类似于jbdc里的connection
package it.com.db;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SF {
public static SqlSession getSession(){
SqlSession session=null;
String resource="conf.xml";//路径,一般不建议直接写在外面,这里只是示范
Reader is=null;
try {
is = Resources.getResourceAsReader(resource);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
session = sessionFactory.openSession();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return session;
}
public static void closeSession(SqlSession session){
if(session!=null){
session.close();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SF.getSession();
}
}
IUserMapper是一个接口文件,在接口中编写了mysql数据库中执行的操作,相当于是将sql于java端分离了
下面测试了增删改查的简单操作
package it.com.db;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
public interface IUsersMapper {
@Select("select * from users")
public List<Map> findAll();
@Select("select count(1) from users where userName=#{userName}")
public int findById(@Param("userName") String userName);
@Select("select count(1) from users where userName=#{userName} and userPwd=#{userPwd}")
public int findByIdPwd(@Param("userName") String userName,@Param("userPwd") String userPwd);
@Insert("insert into users(userName,userPwd) values (#{userName},#{userPwd})")
public void insertUser(@Param("userName") String userName,@Param("userPwd") String userPwd);
@Update("update users set userPwd=#{userPwd} where userName=#{userName}")
public void updateUser(@Param("userName") String userName,@Param("userPwd")String userPwd);
@Delete("delete from users where userName=#{userName}")
public void deleteUser(@Param("userName") String userName);
//表关联
@Select("select content.*,users.Email from content,users where content.userName=users.userName")
public List<Map> findTwo();
//存储过程
@Select("call pp11()")
public List<Map> findAll_a();
}
最后建立实体类。userDao在实体类中完成功能的调用测试
package it.com.dao;
import it.com.db.IUsersMapper;
import it.com.db.SF;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
public class UsersDao {
/**
* @param args
*/
public List<Map> findAll() {
List<Map> list =null;//创建list
SqlSession session =SF.getSession();//获取session对象
//加载mapper文件,获取mapper文件数据库持久化的方法
IUsersMapper um=session.getMapper(IUsersMapper.class);
list=um.findAll();
return list;
}
public int findById(String userName){
SqlSession session = SF.getSession();
IUsersMapper um = session.getMapper(IUsersMapper.class);
int n = um.findById(userName);
return n;
}
public int findByIdPwd(String userName,String userPwd){
SqlSession session = SF.getSession();
IUsersMapper um = session.getMapper(IUsersMapper.class);
int n = um.findByIdPwd(userName, userPwd);
return n;
}
public void insertUser(String userName,String userPwd){
SqlSession session = SF.getSession();
IUsersMapper um = session.getMapper(IUsersMapper.class);
um.insertUser(userName, userPwd);
session.commit();//事务提交,数据库改变时使用(增删改)
}
public void updateUser(String userName,String userPwd){
SqlSession session =SF.getSession();
IUsersMapper um=session.getMapper(IUsersMapper.class);
um.updateUser(userName, userPwd);
session.commit();//事务提交,数据库改变时使用(增删改)
}
public void deleteUser(String userName){
SqlSession session = SF.getSession();
IUsersMapper um=session.getMapper(IUsersMapper.class);
um.deleteUser(userName);
session.commit();
}
public List<Map> findTwo(){
List<Map> list = null;
SqlSession session = SF.getSession();
IUsersMapper um=session.getMapper(IUsersMapper.class);
list=um.findTwo();
return list;
}
public List<Map> findAll_a(){
List<Map> list= null;
SqlSession session = SF.getSession();
IUsersMapper um = session.getMapper(IUsersMapper.class);
list=um.findAll_a();
return list;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
UsersDao user = new UsersDao();
// List<Map> list = user.findAll();
// for(Map map:list){
// System.out.println(map);
// }
//System.out.println(user.findByIdPwd("admire", "111111"));
//user.insertUser("alibaba", "hhhxxx");
//user.updateUser("alibaba", "111111");
//user.deleteUser("alibaba");
// List<Map> list=user.findTwo();
// for(Map map:list){
// System.out.println(map);
// }
// List<Map> list=user.findAll_a();
// for(Map map:list){
// System.out.println(map);
// }
}
}
2.下面来展示配置文件的写法
是用一个xml文件代替了上面的IUsermapper的注解接口文件,代码如下:
<?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="it.com.dao">
<select id="findall" resultType="Map">
select * from users
</select>
<select id="findById" resultType="Map" parameterType="String">
select * from users where userName = #{userName}
</select>
<select id="findByIdPwd" resultType="Map" parameterType="Map">
select * from users where userName = #{userName} and userPwd=#{userPwd}
</select>
<insert id="insertByIdPwd" parameterType="Map">
insert into users(userName,userPwd) values (#{userName},#{userPwd})
</insert>
</mapper>
同样它的实现类:
package it.com.dao;
import it.com.db.SF;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
public class UserDao {
public List<Map> findAll(){
List<Map> list=null;
SqlSession session = SF.getSession();
list=session.selectList("findall"); //不带参
return list;
}
public List<Map> findById(String userName){
List<Map> list=null;
SqlSession session = SF.getSession();
list=session.selectList("findById",userName); //带一个参数
return list;
}
public Object findByIdPwd(String userName,String userPwd){
Object obj = null;
SqlSession session = SF.getSession();
Map map = new HashMap();
map.put("userName", userName);
map.put("userPwd", userPwd);
//selectone 也可以
obj=session.selectList("findByIdPwd",map); //带俩个以上参数,这里的map最能体现java三大特性的封装
return obj;
}
public void insertByIdPwd(String userName,String userPwd){
SqlSession session = SF.getSession();
Map map = new HashMap();
map.put("userName", userName);
map.put("userPwd", userPwd);
session.insert("insertByIdPwd", map);
}
public static void main(String[] args){
UserDao user = new UserDao();
// List<Map> list=user.findAll();
// for(Map map:list){
// System.out.println(map);
// }
// System.out.println(user.findAll());
// System.out.println(user.findById("admire"));
//System.out.println(user.findByIdPwd("admire", "111111"));
user.insertByIdPwd("kkkkkkk", "oaoaoaoa");
}
}