Mybatis小结

在编写JavaWeb项目时,运用Mybatis框架的一些方法:

在建好Web项目后,首先在src目录下新建一个包,包名为db,在这个包内新建一个用来访问数据库的类,比如DBAccess,代码如下:

public class DBAccess {

public SqlSession getSqlSession() throws IOException{
//通过配置文件获取数据库的连接信息
Reader reader=Resources.getResourceAsReader("config/Configuration.xml");
//通过配置信息构建一个SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//通过sqlSessionFactory打开一个数据库会话
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
}

然后,在src目录下新建一个config包,在包内新建一个核心配置文件,包含数据库的连接信息等重要配置信息,部分代码如下:

<environments default="development">
    <environment id="development">
      <transactionManager type="JDBC">
        <property name="" value=""/>
      </transactionManager>
      <dataSource type="UNPOOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
         <!-- 注意连接数据库的url后面加上编码方式 -->
        <property name="url" value="jdbc:mysql://localhost:3306/micromessage?useUnicode=true&amp;characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value="usbw"/>
      </dataSource>
    </environment>
  </environments>

   <mappers>
    <mapper resource="sqlxml/Message.xml"/>
  </mappers>

然后,在src目录下新建一个bean包,用来放置与数据库中相对应的实体类,代码如下:

package bean;
/**
 * 与消息表对应的实体类
 *
 */
public class Message {

private int id;
private String command;
private String description;
private String content;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCommand() {
return command;
}
public void setCommand(String command) {
this.command = command;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "Message [id=" + id + ", command=" + command + ", description="
+ description + ", content=" + content + "]";
}

}

接下来,根据前端页面来编写servlet处理前端的数据,新建一个servlets包,在包内新建一个servlet类,代码如下:

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置字符编码
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//获取页面传来的值
String command=request.getParameter("command");
String description=request.getParameter("description");
//向页面传值
request.setAttribute("command", command);
request.setAttribute("description", description);
//查询消息列表并传给页面
ListService listService = new ListService();
//向页面跳转
request.setAttribute("messageList", listService.queryMessageList(command, description));

request.getRequestDispatcher("/WEB-INF/jsp/back/list.jsp").forward(request, response);
}

然后写业务处理层,即新建一个service包,在包内新建ListService类,代码如下:

public class ListService {

public List<Message> queryMessageList(String command,String description){
MessageDao messageDao=new MessageDao();
return messageDao.queryMessageList(command, description);
}
}

接下来,新建一个dao包,用来放一些基础方法类,在包内新建一个MessageDao类,代码如下:

public class MessageDao {

public List<Message> queryMessageList(String command,String description){

List<Message> messageList = new ArrayList<Message>();
DBAccess dbAccess=new DBAccess();
SqlSession sqlSession=null;
try {
sqlSession=dbAccess.getSqlSession();
Message message=new Message();
message.setCommand(command);
message.setDescription(description);
//通过sqlSession执行SQL语句,由于selectList方法只允许传递两个参数,故将数据封装在对象中,来传递对象。
messageList=sqlSession.selectList("Message.queryMessageList",message);//命名空间为Message中id为queryMessageList
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(sqlSession!=null){
sqlSession.close();
}
}
return messageList;
}

然后,新建一个名为sqlxml的包,用来放置一些有关sql语句配置信息的配置文件,在包内新建一个名为Message.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="Message">

<!--type中的内容为bean类的全类名,主键用id标签,其它的用result标签,column为数据库中相应的列名,property为bean包内实体类中定义的变量名,

jdbcType为column的类型,即int对应INTEGER,VARCHAR对应VARCHAR。-->
<resultMap type="bean.Message" id="MessageResult">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="command" jdbcType="VARCHAR" property="command" />
<result column="description" jdbcType="VARCHAR" property="description" />
<result column="content" jdbcType="VARCHAR" property="content" />
</resultMap>


<select id="queryMessageList" parameterType="bean.Message" resultMap="MessageResult">
    select id,command,description,content from message where 1=1
   <!--  <where> --><!-- 注意双引号""要用&quot;&quot;来代替,问号?要用#{变量名}来代替。
   &quot;&quot;.equals(command.trim()):用来判断输入的是不是空格 -->
    <if test="command != null and !&quot;&quot;.equals(command.trim())">
    and command=#{command}
   </if>
   <if test="description != null and !&quot;&quot;.equals(description.trim())">
    and description like '%' #{description} '%'
   </if>
   <!--  </where> -->
  </select>
</mapper>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值