• 云服务器和虚拟主机有哪些区别云服务器和虚拟主机有哪些区别
  • 678辅助网;如何维护国内bgp高防服务器678辅助网;如何维护国内bgp高防服务器
  • 如何排查云主机远程故障?如何排查云主机远程故障?
今日更新4个资源 ☆ 共分享了577个资源
  • VeryCapturev功能全面屏幕捕捉截图工具

    VeryCapture是一款定位功能强大,设计优美的屏幕捕捉软件,截屏和录屏都毫无压力,按ctrl两次唤出主界面,点击主界面就可以方便地按捕获模式进行截屏和录屏了,感兴趣的朋友不要错过了。1.截屏全屏截图、矩形截图、任意截图、延时截图、长截图2.视频GIF、视频软件完全免费,无任何广告。介绍主要功能有:多种形式截屏贴图功能GIF/视频录制功能OCR翻译功能下载地址:https://678cnn.lanzoub.com/ipURx0mqqoti...

    2023-02-06 绿色软件
  • 安卓自媒体工具箱 做视频剪辑必备

    一个自媒体从业人员必备的手机工具合集,这里有超多的实用视频工具,大家通过自媒体工具箱app就能更快的找到各种视频素材,并且一键进行修改处理,转化为自己的视频内容下载地址:https://tonyi.lanzouy.com/i51lZ0mndnyb...

    2023-02-06 绿色软件
  • 聚合热搜热榜PHP接口API源码

    聚合热搜热榜PHP源码本源码接口均抓取采集各大官网数据使用说明;解压压缩包里面的hotlist.php文件到网站目录PHP环境为5.6或以上然后输入参数输入?type参数内容;zhihu(知乎热榜) weibo(微博热搜) baidu(百度热点) history(历史上的今天) bilihot(哔哩哔哩热搜) biliall(哔哩哔哩全站日榜) sspai(少数派头条) douyin(抖音热搜) csdn(CSDN头条榜) 使用方法;访问你的域名地址/hotlist.php?type=?type=(输入参数才能显示内容)示例;访问你的域名地址/hotlist.php?type=zhihu项目下载地址;https://zhiyun.lanzoue.com/i6kny0mp1wabgithub项目下载地址;https://github.com/zhiyun66/hotlist...

    2023-02-06 网站源码
  • 云主机邮件服务器,架设邮件服务器配置方法

    鉴于微信、qq等各种聊天工具的封号越来越严重,越来越不讲道理,为了业务上的可持续性,避免因封号而导致丢失大量好友,避免因封号而导致原来留的联系方式失效,很有必要弄一个自己的、不会被封号的联系方式,翻看下各种联系方式,除了电话之后,只有自己弄一个自己的邮箱才是相对安全的,只要域名不被封,邮箱就都是可以用的,而且所有的聊天历史记录都能想保持多久就保持多久。域名都有了,那么现在就是架设的问题了,弄了一台云服务器,windows2012的,先安装一下宝塔,然后通过宝塔的web链接进入宝塔管理界面。在软件商店中搜索邮件,出来的三个结果中有一个”宝塔邮件服务器2.1“,选择安装。安装好之后,通过远程桌面进入服务器,打开hMailServer所在的目录,一般是C:\BtSoft\hMailServer\Bin,打开目录下的hMailAdmin.exe.增加一下域名,然后就可以添加邮箱号码了。然后要做一下域名解析,增加mail和mx两条记录即主机名:mail,记录类型:A,记录值:你的IP主机名:@,记录类型:MX,记录值:mail.你们域名然后打开防火墙,选择C:\BtSoft\hMailServer\Bin目录下的hMailServer.exe允许访问网络;如果服务器有组策略的话,要再选择放开25、109、110、143端口。这样就可以了。...

    2023-02-06 网络教程
  • 音乐猪电影网站简约响应式苹果cms模板源码

    先把文件解压出来!上传zhuzhuxia这个文件到你的模板文件夹(template)中然后去网站后台 找到→系统→网站参数设置→网站模板、选择zhuzhuxia文件→模板目录:写html_baise*最后点击保存 然后点下网站后台的右上角清理缓存 即可!下载地址:https://whpx8.lanzoul.com/i9Fja0meoiqf...

    2023-02-03 网站源码
  • Linux下MySQL5.6.12源码安装的详细过程

    1、安装前的有关描述必备的包和工具gcc/g++ :MySQL 5.6开始,需要使用g++进行编译。cmake :MySQL 5.5开始,使用cmake进行工程管理,cmake需要2.8以上版本。bison :MySQL语法解析器需要使用bison进行编译。ncurses-devel :用于终端操作的开发包。zlib :MySQL使用zlib进行压缩功能需要的包libxml :用于XML输入输出方式的支持。openssl :使用openssl安全套接字方式通信。dtrace :用于诊断MySQL问题。有关MySQL编译参数CMAKE_BUILD_TYPE 编译的版本类型:RelWithDebInfo和Debug,不同之处是RelWithDebInfo会进行优化。CMAKE_INSTALL_PREFIX 指定make install安装的目标路径。SYSCONFDIR 指定配置文件的默认路径。MYSQL_DATADIR 指定data目录的默认路径。WITH_DEBUG 指定是否有debugging信息,一般用于源码调试时,打开WITH_DEBUG,生产环境关闭。ENABLED_PROFILING 指定是否可以使用show profile显示操作执行的详细信息。DEFAULT_CHARSET 指定默认字符集,可以在启动的配置文件中指定。DEFAULT_COLLATION 指定默认字符比较、排序的规则。WITH_EXTRA_CHARSETS 指定其他可能使用的字符集。WITH_SSL 指定SSL的类型,从5.6.6开始默认bundled类型,此外也可以指定SSL库的路径地址。WITH_ZLIB 指定zlib的类型,用于压缩功能。ENABLED_LOCAL_INFILE 指定是否允许使用load data infile功能。WITH_EMBEDDED_SERVER 指定是否编译libmysqld嵌入式库。INSTALL_LAYOUT 指定安装的布局类型。WITH_storage_STORAGE_ENGINE 指定编译支持的存储引擎,默认支持MyISAM,MERGE,MEMORY,CSV存储引擎。更多详细参数可参考 http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html本次安装环境[root@SZ-RD03 ~]# cat /etc/issueCentOS release 5.9 (Final)Kernel \r on an \m[root@SZ-RD03 ~]# uname -aLinux SZ-RD03 2.6.18-348.el5 #1 SMP Tue Jan 8 17:53:53 EST 2013 x86_64 x86_64 x86_64 GNU/LinuxMySQL版本:5.6.12-log Source distribution安装目录为:/usr/local/mysql数据目录为:/data/mysqldata存储引擎包括:MEMORY,MyISAM,InnoDB等字符集为:UTF82、源码安装MySQL 先安装需要用到的库:yum -y install gcc gcc-c++ ncurses-devel下载所需软件包:将下载的文件都放到/usr/local/src目录下,如下cd /usr/local/srcwget http://www.cmake.org/files/v2.8/cmake-2.8.11.1.tar.gzwget http://ftp.gnu.org/gnu/bison/bison-2.7.tar.gzwget http://ftp.gnu.org/gnu/m4/m4-1.4.16.tar.gzwget http://www.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.12.tar.gz/from/http://cdn.mysql.com/安装cmake编译器cd /usr/local/srctar -zxvf cmake-2.8.11.1.tar.gzcd cmake-2.8.11.1./bootstrapmake && make install安装m4cd /usr/local/srctar -zxvf m4-1.4.16.tar.gzcd m4-1.4.16./configure && make && make install安装bisoncd /usr/local/srctar -zxvf bison-2.7.tar.gzcd bison-2.7./configure && make && make install创建mysql用户与组,相关目录/usr/sbin/groupadd mysql/usr/sbin/useradd -g mysql mysqlmkdir -p /usr/local/mysqlchown -R mysql:mysql /usr/local/mysqlmkdir -p /data/mysqldatachown -R mysql:mysql /data/mysqldata/安装mysqlcd /usr/local/srctar -zxvf mysql-5.6.12.tar.gzexport CFLAGS="-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"export CXXFLAGS="-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"export CXX=g++cd mysql-5.6.12cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=utf8,gbk-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1-DWITH_ARCHIVE_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/data/mysqldata/ -DSYSCONFDIR=/usr/local/mysql/-DWITH_SSL=bundled -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1-DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1make && make install初始化数据库cd /usr/local/mysql/./scripts/mysql_install_db –user=mysql –ldata=/data/mysqldata3、安装后的收尾工作配置运行环境vim /etc/profileexport PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATHsource /etc/profile创建开机启动cp support-files/my-default.cnf /etc/my.cnf #也可以将my.cnf直接复制到安装文件位置cp support-files/mysql.server /etc/init.d/mysqldchkconfig –level 35 mysqld onservice mysqld start查检是否启动成功netstat -ntlp | grep mysql设置root密码mysqladmin -u root password 'xxx'登陆账号mysql -uroot -pxxx配置参数根据系统及业务需求配置my.cnf文件到此,相信大家对“Linux下MySQL5.6.12源码安装的详细过程”有了更深的了解,不妨来实际操作一番吧!...

    2023-02-03 网络教程
  • MySQL中的if和case语句怎么用?

    Mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用:IF表达式IF(expr1,expr2,expr3)如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。select *,if(sva=1,"男","女") as ssva from taname where sva != ""作为表达式的if也可以用CASE when来实现:select CASE sva WHEN 1 THEN '男' ELSE '女' END as ssva from taname where sva != ''在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。例如:SELECT CASE 1 WHEN 1 THEN 'one'WHEN 2 THEN 'two'ELSE 'more' ENDas testCol将输出oneIFNULL(expr1,expr2)假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。mysql> SELECT IFNULL(1,0); -> 1mysql> SELECT IFNULL(NULL,10); -> 10mysql> SELECT IFNULL(1/0,10); -> 10mysql> SELECT IFNULL(1/0,'yes'); -> 'yes'IFNULL(expr1,expr2) 的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、 REAL或 INTEGER。IF ELSE 做为流程控制语句使用if实现条件判断,满足不同条件执行不同的操作,这个我们只要学编程的都知道if的作用了,下面我们来看看mysql 存储过程中的if是如何使用的吧。IF search_condition THENstatement_list[ELSEIF search_condition THEN]statement_list ...[ELSEstatement_list]END IF与PHP中的IF语句类似,当IF中条件search_condition成立时,执行THEN后的statement_list语句,否则判断ELSEIF中的条件,成立则执行其后的statement_list语句,否则继续判断其他分支。当所有分支的条件均不成立时,执行ELSE分支。search_condition是一个条件表达式,可以由“=、<、<=、>、>=、!=”等条件运算符组成,并且可以使用AND、OR、NOT对多个表达式进行组合。例如,建立一个存储过程,该存储过程通过学生学号(student_no)和课程编号(course_no)查询其成绩(grade),返回成绩和成绩的等级,成绩大于90分的为A级,小于90分大于等于80分的为B级,小于80分大于等于70分的为C级,依次到E级。那么,创建存储过程的代码如下:create procedure dbname.proc_getGrade(stu_no varchar(20),cour_no varchar(10))BEGINdeclare stu_grade float;select grade into stu_grade from grade where student_no=stu_no and course_no=cour_no;if stu_grade>=90 thenselect stu_grade,'A';elseif stu_grade=80 thenselect stu_grade,'B';elseif stu_grade=70 thenselect stu_grade,'C';elseif stu_grade70 and stu_grade>=60 thenselect stu_grade,'D';elseselect stu_grade,'E';end if;END注意:IF作为一条语句,在END IF后需要加上分号“;”以表示语句结束,其他语句如CASE、LOOP等也是相同的。...

    2023-02-03 网络教程
  • 小巧数据库Apache Derby 使用攻略

    Derby 介绍将目光放在小 Derby 的原因是纯绿色、轻巧、内存占用小,分分钟在你机子跑起来,自己做点需要连接数据库的代码实践非常方便。虽然 Mysql 也可以,多一种选择,不是也挺好么?Apache Derby是一个完全用 java 编写的数据库,Derby是一个Open source的产品。Apache Derby非常小巧,核心部分derby.jar只有2M,既可以做为单独的数据库服务器使用,也可以内嵌在应用程序中使用。官网下载地址:http://db.apache.org/derby/derby_downloads.html点击进入版本中,注意查看 Build Environment 需要的条件,点击下载 zip 解压到随意目录即可。稍稍配置下环境变量Derby 基于 Java 编写,你机子上需要存在 Java JRE,具体安装和配置就不说了。下面是 Derby 需要配置的的系统环境变量,配置环境变量是想让系统知道去哪找命令对应的执行程序。Name: DERBY_HOMEValue: E:\Java\derby\db-derby-10.10.1.1-bin在Path加入:%DERBY_HOME%\bin 在CLASSPATH加入:%DERBY_HOME%\lib \derby.jar;%DERBY_HOME%\lib\derbyclient.jar;%DERBY_HOME%\lib\derbytools.jar;%DERBY_HOME%\lib\derbynet.jar切到 cmd 黑框下面,敲 sysinfo至此,小巧的 Derby 已经成功安装在你的电脑上,是不是很快?骚年,可以进行折腾了。Derby 操作和 Java 访问 a.创建数据库,并且进行连接(存在则连接,不存在创建后连接)connect 'jdbc:derby:dedb;user=root;password=root;create=true';b.新建系统用户表create table t_user(uuid varchar(32), name varchar(10), age int, address varchar(40));c.插入一些测试数据insert into t_user values('B82A6C5244244B9BB226EF31D5CBE508', 'Miachel', 20, 'street 1');insert into t_user values('B82A6C5244244B9BB226EF31D5CBE509', 'Andrew', 35, 'street 1');insert into t_user values('B82A6C5244244B9BB226EF31D5CBE510', 'Orson', 47, 'street 1');insert into t_user values('B82A6C5244244B9BB226EF31D5CBE511', 'Rambo', 19, 'street 1');注意:操作 Derby 需要使用 ij 工具(和 oracle 的 plus 差不多),CMD 下面输入 ij 即可进入 ij 模式;创建数据库的路径取决于你 CMD 的路径,如 C:\Users\Administrator> 下,创建的 Derby 数据库就在该目录下面;如果你对 sql 比较熟悉的话,操作 derby 没有任何问题。e.在 Java 程序中使用 Derbyimport java.sql.*;public class DerbyTest { private static String driver = "org.apache.derby.jdbc.EmbeddedDriver"; private static String protocol = "jdbc:derby:"; String dbName = "E:\\Users\\Workspaces\\Derby\\dedb"; public static void loadDriver() { try { Class.forName(driver).newInstance(); } catch (Exception e) { e.printStackTrace(); } } public void getDataFromDerby() { try { Connection conn = DriverManager.getConnection(protocol + dbName + ";user=root;password=root;create=true"); Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery("select * from t_user"); while (resultSet.next()) { System.out.println(resultSet.getString(1)); System.out.println(resultSet.getString(2)); } conn.close(); statement.close(); resultSet.close(); } catch (Exception e1) { e1.printStackTrace(); } } public static void main(String[] args) { DerbyTest derbyTest = new DerbyTest(); loadDriver(); derbyTest.getDataFromDerby(); }}...

    2023-02-03 网络教程
  • oraclelinux系统udev配置

    一、根据scsi_id的值在vmware虚拟机中,默认不会显示scsi磁盘的scsi_id关闭虚拟机,打开虚拟机的xmv文件,在文件的末尾添加参数disk.EnableUUID = ”TRUE”重新打开虚拟机查看磁盘scsi_id[root@localhost ~]# /sbin/scsi_id -g -u -d /dev/sdd1up005[root@localhost ~]# /sbin/scsi_id -g -u -d /dev/sde1up006[root@localhost ~]# /sbin/scsi_id -g -u -d /dev/sdf1up004[root@localhost ~]# /sbin/scsi_id -g -u -d /dev/sdg1up001[root@localhost ~]# /sbin/scsi_id -g -u -d /dev/sdh1up003[root@localhost ~]# /sbin/scsi_id -g -u -d /dev/sdi1up002编辑udev配置文件KERNEL==”sd*[0-9]”,SUBSYSTEM==”block”,PROGRAM==”/sbin/scsi_id -g -u -d /dev/$name”,RESULT==”1up001”,NAME=”asmdisk1”KERNEL==”sd*[0-9]”,SUBSYSTEM==”block”,PROGRAM==”/sbin/scsi_id -g -u -d /dev/$name”,RESULT==”1up002”,NAME=”asmdisk2”KERNEL==”sd*[0-9]”,SUBSYSTEM==”block”,PROGRAM==”/sbin/scsi_id -g -u -d /dev/$name”,RESULT==”1up003”,NAME=”asmdisk3”KERNEL==”sd*[0-9]”,SUBSYSTEM==”block”,PROGRAM==”/sbin/scsi_id -g -u -d /dev/$name”,RESULT==”1up004”,NAME=”asmdisk4”KERNEL==”sd*[0-9]”,SUBSYSTEM==”block”,PROGRAM==”/sbin/scsi_id -g -u -d /dev/$name”,RESULT==”1up005”,NAME=”asmdisk5”KERNEL==”sd*[0-9]”,SUBSYSTEM==”block”,PROGRAM==”/sbin/scsi_id -g -u -d /dev/$name”,RESULT==”1up006”,NAME=”asmdisk6”[root@localhost ~]# ls /dev/ |grep asmasmdisk1asmdisk2asmdisk3asmdisk4asmdisk5asmdisk6二、根据scsi磁盘的属性有的版本是udevinfo,有的版本是udevadm infoudevadm info根据划红线的属性来确定磁盘配置udev规则启动udev,然后查看磁盘udevinfo和这个相同udevinfo -a -p /sys/block/sdd 查看磁盘的属性不同的是磁盘的属性参数不是ATTRS,而是SYSFSudev配置为kernel==”sd*[0-9]”,SUBSYSTEM==”block”,SYSFS{vendor}==”storage1”,SYSFS{model}==”disk1”,NAME=”scsi/asmdisk1”……..然后启动udev...

    2023-02-03 网络教程
  • mybatis-config详细配置说明

    <?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> <!-- 属性配置元素可以将配置值具体化到一个属性文件中,并且使用配置文件的key作为占位符 application.properties jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatisdemo jdbc.username=root jdbc.password=admin 在mybatis-config.xml中可以使用application.properties文件中定义的占位符 当然也可以直接使用properties来设置值 --> <properties resource="application.properties"> <property name="username" value="db_user" /> <property name="password" value="verysecurepwd" /> </properties> <!-- 全局设置settings --> <settings> <setting name="cacheEnabled" value="true" /> <setting name="lazyLoadingEnabled" value="true" /> <setting name="multipleResultSetsEnabled" value="true" /> <setting name="useColumnLabel" value="true" /> <setting name="useGeneratedKeys" value="false" /> <setting name="autoMappingBehavior" value="PARTIAL" /> <setting name="defaultExecutorType" value="SIMPLE" /> <setting name="defaultStatementTimeout" value="25000" /> <setting name="safeRowBoundsEnabled" value="false" /> <setting name="mapUnderscoreToCamelCase" value="false" /> <setting name="localCacheScope" value="SESSION" /> <setting name="jdbcTypeForNull" value="OTHER" /> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode ,toString" /> </settings> <!-- 类型别名 主要是为了简化在mapper文件中paramerType和resultType对应的类全限定名 --> <typeAliases> <typeAlias alias="Tutor" type="com.mybatis3.domain.Tutor" /> <!-- 可以提供需要取别名的类所在的包,mybatis会自动扫描包内的javaBean,然后分别为每个javaBean定义一个小写字母开头的 例如这个包下有一个Student,那么别名为:student 除此之外:@Alias("StudentAlias") public class Student{ ... } @Alias 注解将会覆盖配置文件中的<typeAliases>定义 --> <package name="com.mybatis3.domain" /> </typeAliases> <!-- 类型句柄,类型处理器 当mybatis执行一个INSERT操作的时候,汇创建一个PreparedStatement对象,并且执行一系列操作(操作下面详细说) 这个过程中有一个setXXX()方式为占位符设置值的过程,xxx可以是Int,String,Date的任何一种类型, 那么mybatis是依据什么来判断该使用setInt()还是setString()呢?其实 MyBatis 是通过使用类型处理器(type handlers)来决定这么做的。 MyBatis 对于以下的类型使用内建的类型处理器:所有的基本数据类型、基本类型的包裹类型、byte[] 、 java.util.Date、java.sql.Date、java,sql.Time、java.sql.Timestamp、java 枚举类型等。所以当 MyBatis 发现 属性的类型属于上述类型,他会使用对应的类型处理器将值设置到 PreparedStatement 中,同样地,当从 SQL 结果集构 建 JavaBean 时,也有类似的过程。 --> <typeHandlers> <typeHandler handler="com.mybatis3.typehandlers. PhoneTypeHandler" /> <package name="com.mybatis3.typehandlers" /> </typeHandlers> <!-- 数据库连接环境配置--> <environments default="development"> <!-- environment: mybatis可以有多个dataScource环境,如DEV(开发),TEST(测试), 可以通过默认的设置environment值来设定想要的environment id。 如果一个应用需要连接多个数据库,需要将每一个数据库设置成一个单独的环境, 并且为每一个数据库设置一个SqlSessionFactory --> <environment id="development"> <!-- 事务管理器 type1:JDBC:mybatis内部会使用JdbcTransactionFactory来创建TransectionManager。 例如,部署到tomcat的应用程序,需要应用程序自己来管理程序 type2:MANAGED(托管,应用本身不去管理实务,交给所在服务器来管理): mybatis内部使用ManagedTransactionFactory来创建事务管理其TransactionManager 例如:当一个 JavaEE的应用程序部署在类似 JBoss, WebLogic,GlassFish 应用服务器上时, 它们会使用 EJB 进行应用服务器的事务管理能力。在这些管理环境中,你可以使用 MANAGED 事务管理器。 --> <transactionManager type="JDBC" /> <!-- 数据源dataSource type1:UNPOOLED:会为每一个数据库操作创建一个新的链接,并关闭它。适合于小数据小并发的情况 type2:POOLED:会穿件一个数据库连接池,开发和测试阶段常用模式 type3:JNDI:从在服务器上配置好的JNDI数据源dataSource获取数据库连接,在生产环境,优先考虑 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> <environment id="production"> <transactionManager type="MANAGED" /> <dataSource type="JNDI"> <property name="data_source" value="java:comp/jdbc/MyBatisDemoDS" /> </dataSource> </environment> </environments> <!-- mapper文件映射 --> <mappers> <mapper resource="com/mybatis3/mappers/StudentMapper.xml" /> <mapper url="file:///D:/mybatisdemo/mappers/TutorMapper.xml" /> <mapper class="com.mybatis3.mappers.TutorMapper" /> </mappers> <!-- 附: 1、mybatis执行一条INSERT语句的过程 1)创建一个有占位符的 PreparedStatement 接口,如下: Java Code PreparedStatement pstmt = connection.prepareStatement ("INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB) VALUES(?,?,?,?)"); 2)检查 Student 对象的属性 studId 的类型,然后使用合适 setXXX 方法去设置参数值。这里 studId 是 integer 类型,所以会使用 setInt()方法: Java Code pstmt.setInt(1,student.getStudId()); 3)类似地,对于 name 和 email 属性都是 String 类型,MyBatis 使用 setString()方法设置参数。 Java Code pstmt.setString(2, student.getName()); pstmt.setString(3, student.getEmail()); 4)至于 dob 属性, MyBatis 会使用 setDate() 方法设置 dob 处占位符位置的值。 5)MyBaits 会将 java.util.Date 类型转换为 into java.sql.Timestamp 并设值: pstmt.setTimestamp(4, new Timestamp((student.getDob()). getTime())); 2、自定义typeHandler 假设表 STUDENTS 有一个 PHONE 字段,类型为 VARCHAR(15),而 JavaBean Student 有一个 PhoneNumber 类定义类型的 phoneNumber 属性。 Java Code public class PhoneNumber{ private String countryCode; private String stateCode; private String number; public PhoneNumber(){ //... } public PhoneNumber(String countryCode, String stateCode, String number){ this.countryCode = countryCode; this.stateCode = stateCode; this.number = number; } public PhoneNumber(String string){ if(string != null){ String[] parts = string.split("-"); if(parts.length > 0) this.countryCode = parts[0]; if(parts.length > 1) this.stateCode = parts[1]; if(parts.length > 2) this.number = parts[2]; } } public String getAsString(){ return countryCode + "-" + stateCode + "-" + number; } // Setters and getters } public class Student{ private Integer id; private String name; private String email; private PhoneNumber phone; // Setters and getters } XML Code <insert id="insertStudent" parameterType="Student"> insert into students(name,email,phone) values(#{name},#{email},#{phone}) </insert> 这里,phone 参数需要传递给#{phone};而 phone 对象是 PhoneNumber 类型。然而,MyBatis 并不知道该怎样来处理这个类型的对象。 为了让 MyBatis 明白怎样处理这个自定义的 Java 对象类型,如 PhoneNumber,我们可以创建一个自定义的类型处理器,如下所示: 1)MyBatis 提供了抽象类 BaseTypeHandler<T> ,我们可以继承此类创建自定义类型处理器。 Java Code packagecom.mybatis3.typehandlers; importjava.sql.CallableStatement; importjava.sql.PreparedStatement; importjava.sql.ResultSet; importjava.sql.SQLException; importorg.apache.ibatis.type.BaseTypeHandler; importorg.apache.ibatis.type.JdbcType; importcom.mybatis3.domain.PhoneNumber; public class PhoneTypeHandler extends BaseTypeHandler<PhoneNumber>{ @Override public void setNonNullParameter(PreparedStatement ps, int i, PhoneNumber parameter, JdbcType jdbcType) throwsSQLException{ ps.setString(i, parameter.getAsString()); } @Override public PhoneNumber getNullableResult(ResultSet rs, String columnName)throws SQLException{ return new PhoneNumber(rs.getString(columnName)); } @Override public PhoneNumber getNullableResult(ResultSet rs, int columnIndex)throws SQLException{ return new PhoneNumber(rs.getString(columnIndex)); } @Override public PhoneNumber getNullableResult(CallableStatement cs, int columnIndex)throws SQLException{ return new PhoneNumber(cs.getString(columnIndex)); } } 2)我们使用 ps.setString()和 rs.getString()方法是因为 phone 列是 VARCHAR 类型。 3)一旦我们实现了自定义的类型处理器,我们需要在 mybatis-config.xml 中注册它: XML Code <?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> <properties resource="application.properties" /> <typeHandlers> <typeHandler handler="com.mybatis3.typehandlers. PhoneTypeHandler" /> </typeHandlers> </configuration> 注册 PhoneTypeHandler 后, MyBatis 就能够将 Phone 类型的对象值存储到 VARCHAR 类型的列上。 --></configuration>...

    2023-02-03 网络教程

广告合作

在线咨询:点击这里给我发消息

扫码赞赏