有关Ajax套用问题,表格列表等宽属性,Mybatis从数据库读取数据。

上周网站写了两天,发现走的路好像不太对。想换一种新的思路,但需要从数据库中获取新的数据。
毕竟自己以后要接手前后端的,不能总是麻烦余平大佬,于是决定从他那里接过来后端的活,开始学习。

有关Ajax套用问题

本来是用Ajax里套一个Ajax的形式去实现,发现了问题。就是Ajax的实现方式默认是异步的。这样的意思是,可能第二个Ajax的函数会与第一个Ajax的函数同时执行,这样代码就会乱。
为了解决这个问题,可以在第二个Ajax里设置如下属性:

async: false,

这个代码将Ajax的同步方式改为了同步。如果这个Ajax的动作不执行完,将不会执行接下来的动作。

列表等宽属性

帮沈老师改网页的时候,为了布局好看一些,用到了一个列表等宽属性:

table-layout:fixed;

Mybatis与数据库的互动

虽然解决了Ajax乱执行的问题,但是函数写完后,会发现莫名其妙的多出</ul><li>这个代码,无论是删一个这样的代码,还是加上去,最后都没有办法实现,也没有找到原因。于是准备换一种思路,不再生成package的时候生成class,而在生成完package之后,将class放进去。这样想,我需要多加几个表。去问了余平大佬,他说没有新添表,而是在后端进行了数据的操作,于是涉及到了Mybatis与数据库的交互问题。根据Mybatis官方文档以及某学习视频,尝试写了一个小Demo,之后整理了一下思路,具体如下:

配置环境

在Mybatis下与数据库进行交互,需要两个jar包:

  • mybatis
  • mysql-connector-java

这两个包可以在maven.oschina.net进行下载。

同时,为了方便,开启了eclipse的代码补全功能,开启方法:

点击菜单:Windows——>Preferences——>Java–>Editor–>Content Asist。将Auto activation triggers for Java后面的文本框改为“.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”。

概览

项目文件目录如图:
这里写图片描述
在图里,scr与conf可以看到图标是一个文件夹里夹着包,这代表这两个文件夹是源文件夹。而lib是非源文件夹。在项目中使用文件夹里的文件时,要将其转变为源文件夹。lib是库,Referenced Libraries里是使用的库。jUnit 4是测试库。
这个简单的小Demo分为三个部分:

Mybatis配置文件

对Mybatis的应用要又一个配置文件,在本Demo中,指的是Mybatis-config.xml。里面写了有关于本次Demo的Mybatis的配置信息,内容如下:

<?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"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value=""/>
        <property name="username" value=""/>
        <property name="password" value=""/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="api.xml"/>
  </mappers>
</configuration>

在这其中

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>

这部分直接用,如有需要的话可以查阅官方文档修改。但是对于自己读数据库,这样子用就可以了。

      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value=""/>
        <property name="username" value=""/>
        <property name="password" value=""/>
      </dataSource>

这个地方也是照抄,需要修改的地方只有地址账号和密码。代表的读取的哪个数据库。

  <mappers>
    <mapper resource="api.xml"/>
  </mappers>

mapper代表你所用到的映射文件。在这个小Demo里,只读取了一个地方,使用了一个mapper进行练手。

读取部分

读取部分里有三个文件,分别是api.xml、api.java以及apiMapper.java。
首先说api.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="com.lvjing.mybatis.dao.apiMapper">
    <select id="getApiFromSql" resultType="com.lvjing.mybatis.bean.api">
    select * from package_list
    library_id=26)
    </select>
</mapper>

api.xml也是一个配置文件。它配置了你要取的内容的属性,即命名空间、唯一标识以及返回类型。在这个Demo里,api.xml只取了一个一次数据,命名空间设定为com.lvjing.mybatis.dao.apiMapper(为了编程的容易,以后将明明空间都明明为所取数据对应Mapper的Qualified Name),唯一标识为getApiFromSql(Mapper里函数的名字),返回类型是所取数据的java bean文件。然后写上Sql语句对数据进行处理。

再来说api.java,这个文件是一个bean文件,它指明了所取数据库里的内容,本次Demo代码如下:

package com.lvjing.mybatis.bean;

public class api {

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getFirst_version() {
        return first_version;
    }
    public void setFirst_version(String first_version) {
        this.first_version = first_version;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    private String name;
    private String first_version;
    private String type;


}

这里代表我从数据库取name、first_version以及type这三个量(这三个量在package_list里,选择package_list是在上边配置文件中的sql语句中指明)。并为这三个量加上get与set(可用eclipse直接加)。

最后是apiMapper,Mapper文件是一个接口,它是api.xml里的命名空间,它的函数是api.xml里的唯一标识,它被测试函数(下一部分)所使用。代码如下:

package com.lvjing.mybatis.dao;


import java.util.List;

import com.lvjing.mybatis.bean.api;

public interface apiMapper {
    public List<api> getApiFromSql();
}

这代表我要的数据是一个api的List(多行api数据)。

以上三个文件是读取数据的部分,它要有一个接口,有一个bean文件和一个配置文件。

测试文件

MybatisTest.java是本Demo中的测试文件,尝试从数据库读取数据并返回。创建该测试文件时应该New-Junit Test Case,建立完成后ctrl+shift+O进行打包,打入InputStream以及apache。
文件代码如下:

package com.lvjing.mybatis.test;

import java.io.IOException;
import java.io.InputStream;
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;
import org.junit.Test;

import com.lvjing.mybatis.bean.api;
import com.lvjing.mybatis.dao.apiMapper;

public class MybatisTest {

    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "Mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        return sqlSessionFactory;

    }

    @Test
    public void test() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();
        try {
            apiMapper mapper = openSession.getMapper(apiMapper.class);
            List<api> api = mapper.getApiFromSql();
            for(int i=1;i<api.size();i++) {
            System.out.println(api.get(i).getName());
            }

        }
        finally {
            openSession.close();        }
    }

}

其中

    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "Mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        return sqlSessionFactory;

    }

这部分用来建立SqlSessionFactory,需要改动的部分只有String resource =”“;这里,将其改为Mybatis的配置文件。

    @Test
    public void test() throws IOException {
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        SqlSession openSession = sqlSessionFactory.openSession();
        try {
            apiMapper mapper = openSession.getMapper(apiMapper.class);
            List<api> api = mapper.getApiFromSql();
            for(int i=1;i<api.size();i++) {
            System.out.println(api.get(i).getName());
            }

        }
        finally {
            openSession.close();        }
    }

}

之后是测试的函数,将异常抛出,然后建立一个SqlSessionFactory的对象,用这个对象建立一个SqlSession,之后参考代码进行修改即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值