Category: Java

MyBatis 使用详解

什么是 MyBatis ?

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:

配置Mybatis

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.4.2</version>
</dependency>

定义实体Bean

package com.pay.entity;

public class Manager {
    private Integer id;

    private String username;

    private String userpwd;

    private String email;

    public Manager(Integer id, String username, String userpwd, String email) {
        this.id = id;
        this.username = username;
        this.userpwd = userpwd;
        this.email = email;
    }

    public Manager() {
        super();
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username == null ? null : username.trim();
    }

    public String getUserpwd() {
        return userpwd;
    }

    public void setUserpwd(String userpwd) {
        this.userpwd = userpwd == null ? null : userpwd.trim();
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email == null ? null : email.trim();
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", username=").append(username);
        sb.append(", userpwd=").append(userpwd);
        sb.append(", email=").append(email);
        sb.append("]");
        return sb.toString();
    }
}
package com.pay.entity;

public class Manager {
    private Integer id;

    private String username;

    private String userpwd;

    private String email;

    public Manager(Integer id, String username, String userpwd, String email) {
        this.id = id;
        this.username = username;
        this.userpwd = userpwd;
        this.email = email;
    }

    public Manager() {
        super();
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username == null ? null : username.trim();
    }

    public String getUserpwd() {
        return userpwd;
    }

    public void setUserpwd(String userpwd) {
        this.userpwd = userpwd == null ? null : userpwd.trim();
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email == null ? null : email.trim();
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", username=").append(username);
        sb.append(", userpwd=").append(userpwd);
        sb.append(", email=").append(email);
        sb.append("]");
        return sb.toString();
    }
}

定义Dao接口

package com.pay.dao;

import com.pay.entity.Manager;

import java.util.List;

public interface IManagerDao {
    /**
     * 添加一个管理员
     * @param bean 管理实体类
     */
    public void add(Manager bean);

    /**
     * 查询管理用户
     * @param userName 用户名
     * @param userPwd 用户密码
     * @return 一个管理角色对象
     */
    public Manager findUser(String userName,String userPwd);

    /**
     * 更改管理员密码
     * @param userName 用户名
     * @param newPwd 用户新密码
     */
    public void updatePwd(String userName,String newPwd);

    /**
     * 查询所有管理员用户
     * @return 管理员集合
     */
    public List<Manager> findAll();
}

定义Mapper配置文件

<?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.pay.dao.IManagerDao">

  <!-- 缓存配置 -->
  <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>

  <resultMap id="ManagerResultMap" type="com.pay.entity.Manager">
    <constructor>
      <idArg column="id" javaType="java.lang.Integer" jdbcType="INTEGER" />
      <arg column="userName" javaType="java.lang.String" jdbcType="VARCHAR" />
      <arg column="userPwd" javaType="java.lang.String" jdbcType="VARCHAR" />
      <arg column="email" javaType="java.lang.String" jdbcType="VARCHAR" />
    </constructor>
  </resultMap>
  <sql id="ManagerList">
    id, userName, userPwd, email
  </sql>

  <!-- 添加管理员 -->
  <insert id="add" parameterType="com.pay.entity.Manager">
    insert into manager (userName, userPwd,
      email)
    values (#{username,jdbcType=VARCHAR}, #{userpwd,jdbcType=VARCHAR},
      #{email,jdbcType=VARCHAR})
  </insert>

  <!-- 查询管理员 -->
  <select id="findUser" resultMap="ManagerResultMap">
    select <include refid="ManagerList"/> from manager where userName = #{userName} and userPwd = #{userPwd}
  </select>

  <!-- 更改管理员密码 -->
  <update id="updatePwd">
    UPDATE manager SET userPwd = #{userPwd} where userName = #{userName}
  </update>

</mapper>

IDEA设置记录

  1. 修改为Eclipse快捷键
    File -> Settings -> Keymap => Keymaps改为 Eclipse copy
  2. 显示行号:
    File -> Settings -> Keymap ->Editor ->General -> Appearance =>Show line numbers选中
  3. 修改智能提示快捷键
    File -> Settings -> Keymap -> Main menu -> Code -> Completion -> Basic=>修改为Ctrl+Alt+Enter 保存时把冲突的Remove掉。
  4. 查找快捷键冲突问题处理
    File -> Settings -> Keymap -> Main menu -> Edit ->Find =>修改Find...和Replace...分别改为Ctrl+F 和Ctrl+R
  5. 代码智能提示大小写
    File -> Settings ->Eidtor->General->Code Completion => Case sensitive completion 改为none
  6. svn 不能同步代码问题修正
    File -> Settings ->Subversion ->General => Use command line client 去掉选中
  7. 常用快捷键
    • Alt+回车 导入包,自动修正
    • Ctrl+N 查找类
    • Ctrl+Shift+N 查找文件
    • Ctrl+Alt+L 格式化代码
    • Ctrl+Alt+O 优化导入的类和包
    • Alt+Insert 生成代码(如get,set方法,构造函数等)
    • Ctrl+E或者Alt+Shift+C 最近更改的代码
    • Ctrl+R 替换文本
    • Ctrl+F 查找文本
    • Ctrl+Shift+Space 自动补全代码
    • Ctrl+空格 代码提示
    • Ctrl+Alt+Space 类名或接口名提示
    • Ctrl+P 方法参数提示
    • Ctrl+Shift+Alt+N 查找类中的方法或变量
    • Alt+Shift+C 对比最近修改的代码
    • Shift+F6 重构-重命名
    • Ctrl+Shift+先上键
    • Ctrl+X 删除行
    • Ctrl+D 复制行
    • Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*...*/ )
    • Ctrl+J 自动代码
    • Ctrl+E 最近打开的文件
    • Ctrl+H 显示类结构图
    • Ctrl+Q 显示注释文档
    • Alt+F1 查找代码所在位置
    • Alt+1 快速打开或隐藏工程面板
    • Ctrl+Alt+ left/right 返回至上次浏览的位置
    • Alt+ left/right 切换代码视图
    • Alt+ Up/Down 在方法间快速移动定位
    • Ctrl+Shift+Up/Down 代码向上/下移动。
    • F2 或Shift+F2 高亮错误或警告快速定位
    • 代码标签输入完成后,按Tab,生成代码。
    • 选中文本,按Ctrl+Shift+F7 ,高亮显示所有该文本,按Esc高亮消失。
    • Ctrl+W 选中代码,连续按会有其他效果
    • 选中文本,按Alt+F3 ,逐个往下查找相同文本,并高亮显示。
    • Ctrl+Up/Down 光标跳转到第一行或最后一行下
    • Ctrl+B 快速打开光标处的类或方法
  8. 设置idea的SVN忽略掉*.iml文件
    Editor->File Types=>Ignore files and folders增加*.iml;
  9. 改编编辑区文本字体
    File -> settings -> EDITOR COLORS & FONTS -> FONT -> SIZE
  10. IEDA编码设置
    FILE -> SETTINGS -> FILE ENCODINGS => IDE ENCODING
    FILE -> SETTINGS -> FILE ENCODINGS => Project Encoding
    FILE -> SETTINGS -> FILE ENCODINGS => Default encoding for properties files
    FILE -> SETTINGS -> FILE ENCODINGS => Transparent native-to-ascii conversion
  11. System.out.println 快捷输出
    “abc”.sout => System.out.println("abc");
  12. for循环

Java 正则表达式

什么是正则表达式?

正则表达式的定义:这是一种字符串的语法规则,是一种可以用于模式匹配和替换的规则,主要用于文本和字符串的处理(匹配,查找,替换,判断字符串)。一个正则表达式是由普通的字符(a~z)以及特殊字符(元字符)组成的文字模式,用以描述在查找文字主体时待匹配的一个或多个字符串。下面我们会介绍一些常用的元字符

正则表达式的元字符

元字符的定义:元字符:元字符使得正则表达式具有处理能力,指的是那些在正则表达式中具有特殊意义的专用字符,可以规定其前导字符在目标对象中的出现模式

元字符在正则表达式中的写法意义
..任何一个字符
\d\\d0-9之间的任意一个数字
\D\\D任何一个非数字字符
\s\\s空格类字符'\t','\n'等等
\S\\S非空格类字符
\w\\w可用于标识符的字符,不包括美元符
\W\\W不能可用于标识符的字符
\p{Lower}\\p[Lower]小写字母[a~z]
\p{Upper}\\p{Upper}大写字母[A~Z]
\p{ASCII}\\p{ACSII}ASCII字符
\p{Alpha}\\p{Alpha}字母
\p{digit}\\p{digit}数字字符[0~9]
\p{Alnum}\\p{Alnum}字母或数字
\p{Punct}\\p{Punct}标点符号
\p{graph}\\p{graph}可视字符,\p{Alnum},\p{Punct}
\p{Print}\\p{Print}可打印字符
\p{Blank}\\p{Blank}空格或制表符
\p{Cntrl}\\p{Cntrl}控制字符[\x00~\x1F\x7F]
Read more

Tomcat 设置默认访问项目

方法一:(最简单直接的方法)

删除原 webapps/ROOT 目录下的所有文件,将应用下的所有文件和文件夹复制到ROOT文件夹下。

方法二:

删除原 webapps/ROOT 目录下的所有文件,修改文件“conf/server.xml”,在Host节点下增加如下Context的内容配置:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">
    ......
    <Context path="" docBase="C:/apache-tomcat-6.0.32/myapps/bc.war"></Context>
</Host>

注意:

  • path 的值设置为空;
  • 应用不要放到tomcat的webapps目录下(如上述配置是放到自定义的文件夹myapps内的),否则访问时路径很有问题;
  • docBase指定到绝对路径。
    如此设置后重启tomcat,如果docBase指向的是war文件,会自动将war解压到 webapps/ROOT 目录;如果docBase指向的是应用已解压好的目录,如 docBase="C:/apache-tomcat-6.0.32/myapps/bc",tomcat不会生成webapps/ROOT目录(这种情况下之前可以不用删除webapps/ROOT目录,但webapps/ROOT目录内的内容是无法访问的),访问时将直接使用docBase指定的目录。

方法三:

与方法二类似,但不是修改全局配置文件“conf/server.xml”,而是在“conf/Catalina/localhost”目录下增加新的文件"ROOT.xml"(注意大小写哦),文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="C:/apache-tomcat-6.0.32/myapps/bc.war"></Context>

Eclipse Console 加大显示的行数,禁止弹出

Eclipse Console 加大显示的行数:

  1. 进入 Preferences-〉Run/Debug-〉Console
  2. 不选择 Limit console output (方法1)
  3. 选择,设置一下buffer size的设定值 (方法2)

禁止弹出:

  1. 进入 Preferences-〉 Run/Debug-〉Console
  2. 取消勾选 Show when program writes to standard out (当console中有值时弹出)
  3. 取消勾选 Show when program writes to standard error(当console中有错误时弹出)

Eclipse 安装Spring IDE支持

ECLIPSE ARCHIVE 离线安装包 SIZE
4.6 springsource-tool-suite-3.8.1.RELEASE-e4.6-updatesite.zip 146MB
4.5.2 springsource-tool-suite-3.8.1.RELEASE-e4.5.2-updatesite.zip 146MB
ECLIPSE UPDATE SITES 在线安装包
4.6 http://dist.springsource.com/release/TOOLS/update/e4.6/
4.5 http://dist.springsource.com/release/TOOLS/update/e4.5/

Spring Tool Suite™ Downloads

安装方法

  1. 获取当前使用的Eclipse版本
  2. 如果选择压缩包安装就先下载对应的安装包,如果选择链接下载就先将链接复制过来,然后 Eclipse -> Help -> Install Software  -> Add
  3. 下面就简单了,根据操作允许许可协议就好 了。
  4. 推荐使用离线安装包安装,使用在线安装容易造成安装报错(有几个大的jar包如果长时间不动,会造成超时,那么安装就会失败!)

Archives