zoukankan      html  css  js  c++  java
  • MyBatis的基本使用

    MyBatis是一个轻量级的ORM库,使用MyBatis可以方便的将POJO类存储到数据库中或者将数据库的数据转换成POJO类,不同于Hibernate等库,MyBatis推荐使用XML配置中书写SQL语句的方式来转换数据,这样极大的提高了灵活性。下面使用一个简单的例子来说明MyBatis的使用。


    1.添加类库

    使用MyBatis需要使用的类库非常少,一个就是MyBatis的核心库,一个就是数据库的驱动库,这里我们使用mybatis-3.4.4.jar和mysql-connector-java-5.1.38.jar.

    2 创建数据库表

    我们的需要创建一个城市的数据库表,表的字段包括id,城市名称,所属国家,省份,精度,纬度,表结构如下:

    表结构

    3.配置MyBatis的配置文件

    在工程的SRC目录下,也可以是在其他目录下,创建一个config.xml的配置文件,这个文件是描述了访问数据库的基本配置和对POJO类操作的映射文件,配置如下图所示:

    <?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>
        <typeAliases>
            <typeAlias alias="City" type="com.app.heweather.City"/>
        </typeAliases>
    
        <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/weather_db"/>
                    <property name="username" value="root"/>
                    <property name="password" value="111111"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="city.xml"/>
        </mappers>
    </configuration>

    在Environment标签中描述了数据库访问的基本信息,在mapper标签中则指定了对特定的POJO对象操作的XML描述文件,这里对应的是city.xml文件

    4.配置city.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.app.heweather.CityMapper">
    
        <insert id="insertAllCity" parameterType="com.app.heweather.City" useGeneratedKeys="false">
            insert into tb_city (id, city, cntv, province, lat, lon) values
           <foreach collection="list" item="item" index="index" separator=",">
                 (#{item.id}, #{item.city}, #{item.cntv}, #{item.province}, #{item.latitude}, #{item.longitude})
           </foreach>
        </insert>
    </mapper>

    这个文件代表了所有数据库的操作,namespace表示这个方法的命名空间,id表示方法的名字,parameterType表示参数的类型,而在insert标签内部则是sql执行语句,这里使用了一个foreach标签表示批量插入,后续说明。该配置的都ok,那么我们在代码中应该怎么使用呢,接着看下面的。

    5.构建SQLSession类

    我们所有的SQL执行动作都是在SQLSession中执行的,那么构建SQLSession就是我们需要完成的动作。

    public class BasicOperator {
    
        protected static SqlSessionFactory factory;
        protected static Reader reader;
    
        static{
            try{
                reader = Resources.getResourceAsReader("config.xml");
                factory = new SqlSessionFactoryBuilder().build(reader);
            }catch (Exception e){
                e.printStackTrace();
            }
    
    
        }
    }
    
    public class CityOperator extends BasicOperator{
        private static CityOperator co = new CityOperator();
    
        public CityOperator(){
    
        }
    
        public static CityOperator getInstance(){
            return co;
        }
    
        public void insertAllCity(List<City> allCities){
            SqlSession session = factory.openSession();
            int count;
            try{
               count = session.insert("com.app.heweather.CityMapper.insertAllCity", allCities);
               System.out.println(count);
               session.commit();
            }
            catch (Exception e){
                e.printStackTrace();
            }
    
        }
    
    }
    

    代码也比较清晰,首先使用SQLSessionFactoryBuild类构建一个SQLSessionFactory类,使用SQLSessionFactory类的openSession方法创建一个SQLSession,调用SQLSession的insert方法,实现数据的插入,这个insert的第一个参数,也就是我们刚才在city.xml中定义的方法名字,使用命名空间+方法名的书写,第二个参数则是List的类型

    6.调用

    public class WeatherToDb {
    
        public static void main(String[] args) throws Exception{
            URL url = new URL("https://cdn.heweather.com/china-city-list.json");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            InputStream ins = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
            StringBuffer buffer = new StringBuffer();
            String lines = null;
            while((lines = reader.readLine()) != null){
                buffer.append(lines);
            }
            reader.close();
            String result = buffer.toString();
            Gson gson = new Gson();
            List<City> cities = gson.fromJson(result,new TypeToken<List<City>>(){}.getType());
            CityOperator.getInstance().insertAllCity(cities);
        }
    }

    结果如下:

    返回结果

  • 相关阅读:
    JavaWeb核心编程之(四.1)JSP
    一起来说 Vim 语
    你应该知道的基础 Git 命令
    Git 系列(五):三个 Git 图形化工具
    Git 系列(四):在 Git 中进行版本回退
    Git 系列(三):建立你的第一个 Git 仓库
    Git 系列(二):初步了解 Git
    Git 系列(一):什么是 Git
    JavaWeb核心编程之(三.6)HttpServlet
    多线程:子线程执行完成后通知主线程
  • 原文地址:https://www.cnblogs.com/summerpxy/p/13648315.html
Copyright © 2011-2022 走看看