玩转MyBatis框架教程02之入门程序_itcodeschool的博客-程序员宅基地

技术标签: 框架篇  持久层  玩转MyBatis系列教程  Mybatis教程  dao层  

欢迎进群交流(QQ群:655019021)

1、MyBatis入门程序

第一步: 下载mybatis

下载地址:

https://github.com/mybatis/mybatis-3

https://oss.sonatype.org/content/repositories/snapshots/org/mybatis/mybatis/

1.1、MyBatis目录介绍


lib:依赖包

mybatis-3.4.6.jarmybatis核心jar

mybatis-3.4.6.pdfmybatis文档

第二步: 新建数据库和表

/*Tablestructure for table `user` */

DROPTABLE IF EXISTS `user`;

CREATETABLE `user` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(20) COLLATE utf8_bin DEFAULTNULL,

  `password` varchar(20) COLLATE utf8_binDEFAULT NULL,

  `age` int(3) DEFAULT NULL,

  `address` varchar(20) COLLATE utf8_binDEFAULT NULL,

  PRIMARY KEY (`id`)

)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

 --插入数据

INSERTINTO USER(NAME,PASSWORD,age,address) VALUES('zhangsan','123456',18,'成都');

INSERTINTO USER(NAME,PASSWORD,age,address) VALUES('lisi','123456',28,'贵州');

INSERTINTO USER(NAME,PASSWORD,age,address) VALUES('wangwu','123456',38,'北京');

第三步:搭建MyBatis项目环境

1、新建项目

   mybatis-3.4.6.jar:mybatis核心包

   mysql-connector-java-5.1.7-bin.jar:MySQL驱动包

第三步:新建mybatis核心配置文件

在想src路径下新mybais核心配置文件SqlMapConfig.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">

<!-- mybatis核心配置 -->

<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="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>

              <property name="username"value="root" />

              <property name="password"value="1234" />

           </dataSource>

       </environment>

    </environments>

</configuration>

第四步:新建pojo

新建包:com.itcodeschool.domain 

新建类:User.java

package com.itcodeschool.domain;

publicclass User {

    privateintid;

    private String name;

    private String password;

    privateintage;

    private String address;

   

}

//省略get/set/toString方法

第五步:创建mapper接口映射文件

新建包:com.itcodeschool.mapper

新建文件:UserMapper.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="UserMapper">

 

    <!-- id:设置唯一值,resultType 配置返回值类型User-->

<select id="findUser"resultType="com.itcodeschool.domain.User"> 

 

    <!-- 编写 SQL 语句 -->

        SELECT *FROM User

    </select>

  

</mapper>

第六步:加载接口映射文件

在SqlMapConfig.xml文件末尾加上即可

    <!-- 加载UserMapper映射文件 -->

    <mappers>

     <mapper resource="com/itcodeschool/mapper/UserMapper.xml"/>

    </mappers>

第七步:新建测试类

新建包:com.itcodeschool.test

新建测试类:test.java

package com.itcodeschool.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;

importorg.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.apache.tomcat.util.collections.SynchronizedStack;

 

import com.itcodeschool.domain.User;

 

publicclass UserTest {

   

    publicstaticvoid main(String[] args) {

       

        //1、读取配mybatis核心置文件,转换为输入流

        String resource = "SqlMapConfig.xml";

       

        InputStream in = null;

        try {

            in = Resources.getResourceAsStream(resource);

        } catch (IOException e) {

            e.printStackTrace();

        }

       

        //2、根据mybatis核心配置文件输入流构建一个session工厂,SqlSessionFactory

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);

       

        //3、根据SqlSessionFactory对象开启一个会话:SqlSession

        SqlSession sqlSession = sqlSessionFactory.openSession();

        List<User> list = sqlSession.selectList("UserMapper.findUser");

    

        System.out.println("总数量:"+list.size());

        for(User user : list) {

        System.out.println(user);

        }

      //释放资源

        sqlSession.close();

    }

 

}

 

项目完整目录如下:

第八步:运行测试

 

第九步:加入日志

加入jar包

在mybatis-3.4.6\lib目录下找到log4j-1.2.17.jar、slf4j-log4j12-1.7.25.jar加入到项目中

 

在src目录系新建log4j配置文件,log4j.properties

##########Set Log Levels###############

log4j.rootLogger = DEBUG,console

 

######### Output to console ####################

log4j.appender.console = org.apache.log4j.ConsoleAppender

log4j.appender.console.Target = System.out

log4j.appender.console.layout = org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE}%5p%c{ 1:%L-%m%n

 

重新运行UserTest.java类

如下图,可以看到更多日志信息


输出更多的日信息有利于查看程序运行过程和排查错误

 

欢迎进群交流(QQ群:655019021)

 


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/itcodeschool/article/details/80468707

智能推荐

C语言动态分配数组_橡树,你好的博客-程序员宅基地_c动态分配数组

C语言动态分配数组函数动态分配空间函数名参数及返回类型注意事项mallocvoid *malloc(size_t size)1. void *为常指针 2. 不要忘记空字符的空间 malloc(n+## 标题1) 3.未进行初始化callocvoid *calloc(sizet nmemb,size size)1.为分配的空间初始化成0 2.不是很常用,多用于结构体rellocvoid *relloc(void *ptr,size_t size)1

waf报服务器信息泄露,烽火三十六技丨RayWAF支招敏感信息泄露的“查”与“防”..._不靠谱的糖饼的博客-程序员宅基地

随着互联网的兴起,人们的衣食住行都离不开网络,信息与数据的价值及其安全的重要性越来越凸显。人们对于在网络中留存私密信息,从原来的无所畏惧变得如履薄冰,一个“不小心”就可能让这些敏感信息处于裸奔状态,如被不法分子获取、利用,造成的后果将不堪设想。为了营造健康和谐的社会风气,打造清朗的网络空间环境,如何有效防护、安全存储私密及敏感信息,成为备受关注的热门话题,也是网络安全工作中必不可少的重要环节。敏感...

大数据之Azkaban部署_FunnyPrince_的博客-程序员宅基地

目录一、Azkaban概论1.1 为什么需要工作流调度系统1.2 常见工作流调度系统1.3 Azkaban 与 Oozie 对比二、Azkaban集群安装2.1 集群模式安装2.1.1 安装包准备2.1.2 配置 MySQL2.1.3 配置 Executor Server2.1.4 配置 Web Server2.2 Work Flow 案例2.2.1 HelloWorld2.2.2 作业依赖案例2.2.3 自动失败重试案例2.2.4 手动失败重试案例三、Azkaban进阶3.1 JavaProcess 作

List<Object[]>_PDYJ的博客-程序员宅基地

------------------------------------------------------------------------------

上亿数据如何秒查(附源码)_全栈开发者社区的博客-程序员宅基地

点击上方[全栈开发者社区]→右上角[...]→[设为星标]作者:blog.csdn.net/chenleixing/article/details/44994571最近在忙着优化集团公...

php ip变种,PHP实现Snowflake生成分布式唯一ID_weixin_39880899的博客-程序员宅基地

Twitter 的 snowflake 在分布式生成唯一 UUID 应用还是蛮广泛的,基于 snowflake 的一些变种的算法网上也有不少。使用 snowflake 生成 UUID 很多都是在分布式场景下使用,我看了下网上有其中有几篇 PHP 实现的都没有考虑到线程安全。现在 PHP 有了 Swoole 的锁和协程的加持,对于我们开发线程安全和高并发模拟还是很方便的,这里用 PHP 结合 Swo...

随便推点

两天时间,用Python重写了我的Markdown-Online系统,主要使用了Flask技术栈的基础知识,这不比游戏有意思?[email protected]魏大大的博客-程序员宅基地

文末附源码利用非常基础的Python知识,加上Flask框架的基础应用,以及各种各样的插件,编写的非常简单的在线编辑器,你也可以实现~~

复合选择器-后代选择器(HTML、CSS)_七寻北里的博客-程序员宅基地

复合选择器-后代选择器(HTML、CSS)&lt;!DOCTYPE html&gt;&lt;html lang="en"&gt;&lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt; &lt;title&gt;复合选择器-后代选择器&lt;/title&gt; &lt;style&gt;

测试无损音乐软件,无损音乐一定靠谱?/无损检测方法_weixin_39950764的博客-程序员宅基地

无损音乐解压后Hash码不一样?前面提到,无损音乐之所以无损,是因为不会对音频数据进行更改。但是有的朋友发现,把某个Wav文件压缩成为无损音频,然后再转回Wav文件,Hash码竟会不一样,这是否意味着无损压缩造成了音质损失?其实并非如此。为什么Wav文件Hash码会不一样?一些无损音乐转码器在压缩音频的时候,会在音频文件加入额外的metadata信息。这部分metadata信息往往是用来储存音乐的...

Elasticsearch常见启动报错_呆邱邱的博客-程序员宅基地

这些是启动时会出的常见问题解决办法:[[email protected] elasticsearch]# vim /etc/sysctl.conf在文件末尾追加:vm.max_map_count=655360保存后执行[[email protected] elasticsearch]# sysctl -p解决办法:[[email protected] elasticsearch]# vim /etc/security/limits.conf65535修改为65536soft nofile 65536hard nofi

差分,二分_吐泡泡的咸鱼的博客-程序员宅基地

题目链接:传送门题意:给你n个数,以及修改的区间长度,每次修改区间中的加1,求最后所有数相同,最少的操作数。代码如下:#include &lt;bits/stdc++.h&gt;using namespace std;typedef long long ll;const int maxn=1e5+5;int n,K;ll A[maxn],sumA[maxn],addA[maxn];ll check(ll upper){ int i; ll sum,tmp,ret; .

uinty java微信登录,Unity Android接入微信SDK登陆,分享,支付_影歌小队长的博客-程序员宅基地

【实例简介】Unity Android接入微信SDK登陆,分享,支付功能。eclipse工程,进去只要替换成你的包名打出jar和res,bin,manifest就可以直接用。【实例截图】【核心代码】UnityPay2└── UnityPay2├── AndroidManifest.xml├── bin│ ├── AndroidManifest.xml│ ├── classes│ │...

推荐文章

热门文章

相关标签