Skip to content

Commit

Permalink
First commit
Browse files Browse the repository at this point in the history
  • Loading branch information
will-iverson committed Nov 2, 2011
0 parents commit 6a18d67
Show file tree
Hide file tree
Showing 9 changed files with 380 additions and 0 deletions.
11 changes: 11 additions & 0 deletions .gitignore
@@ -0,0 +1,11 @@
#Mac OS X Files
.DS_Store

#Eclipse files
.classpath
.project
.settings

#Maven files
target/**/*
target/*
Binary file added fingw.mwb
Binary file not shown.
56 changes: 56 additions & 0 deletions pom.xml
@@ -0,0 +1,56 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.example</groupId>
<artifactId>mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>mybatis</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.13</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>

</project>
26 changes: 26 additions & 0 deletions src/main/java/com/example/mybatis/App.java
@@ -0,0 +1,26 @@
package com.example.mybatis;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class App {

public static SqlSessionFactory factory = null;

public static void init() {
String resource = "Configuration.xml";
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resource);
} catch (IOException e) {
e.printStackTrace();
return;
}
factory = new SqlSessionFactoryBuilder().build(reader);
factory.getConfiguration().addMapper(TransactionTokenMapper.class);
}
}
31 changes: 31 additions & 0 deletions src/main/java/com/example/mybatis/TransactionToken.java
@@ -0,0 +1,31 @@
package com.example.mybatis;

public class TransactionToken {
private long id = -1;
private String transaction = "";
private String token = "";

public long getId() {
return id;
}

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

public String getTransaction() {
return transaction;
}

public void setTransaction(String transaction) {
this.transaction = transaction;
}

public String getToken() {
return token;
}

public void setToken(String token) {
this.token = token;
}
}
69 changes: 69 additions & 0 deletions src/main/java/com/example/mybatis/TransactionTokenMapper.java
@@ -0,0 +1,69 @@
package com.example.mybatis;

import org.apache.ibatis.annotations.*;
import org.apache.ibatis.type.JdbcType;

/**
* An article on these annotations can be found at:
* http://loianegroner.com/2011/02/getting-started-with-ibatis-mybatis-annotations/
* <p/>
* Notice how the SQL statements are broken up into more readable multiple strings.
* myBatis automatically adds spaces, but otherwise the statements are the same.
*/
public interface TransactionTokenMapper {

@Select({
"select * from trans_token where id = #{id}"
})
@Results({
@Result(column = "id", property = "id", jdbcType = JdbcType.BIGINT, id = true),
@Result(column = "trans_id", property = "transaction", jdbcType = JdbcType.VARCHAR),
@Result(column = "token_id", property = "token", jdbcType = JdbcType.VARCHAR)
})
TransactionToken getById(long id);


/**
* Note the use of the options annotation to tell myBatis to put the returned id
* into the object when the object is successfully inserted.
*/
@Insert({
"insert into trans_token (trans_id, token_id)",
"values (#{transaction}, #{token})"
})
@Options(useGeneratedKeys = true, keyProperty = "id")
int insert(TransactionToken record);


@Select("select count(*) from trans_token")
long count();

@Delete({
"delete from trans_token where id = #{id}"
})
void deleteById(TransactionToken token);

@Delete({
"delete from trans_token where trans_id = #{transaction}"
})
void deleteByTransaction(TransactionToken token);

@Update({
"update trans_token",
"set trans_id = #{transaction},",
"token_id = #{token}",
"where id = #{id}"
})
int update(TransactionToken record);

@Select({
"select id, trans_id, token_id",
"from trans_token where trans_id = #{transaction}"
})
@Results({
@Result(column = "id", property = "id", jdbcType = JdbcType.BIGINT, id = true),
@Result(column = "trans_id", property = "transaction", jdbcType = JdbcType.VARCHAR),
@Result(column = "token_id", property = "token", jdbcType = JdbcType.VARCHAR)
})
TransactionToken selectByTransaction(String transaction);
}
19 changes: 19 additions & 0 deletions src/main/resources/Configuration.xml
@@ -0,0 +1,19 @@
<?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>
<settings>
<setting name="useGeneratedKeys" value="true" />
</settings>

<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/fingw?autoCommit=true" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
</configuration>
27 changes: 27 additions & 0 deletions src/main/resources/log4j.xml
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<!-- Console output -->

<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss} %m (%F:%L) \n"/>
</layout>
</appender>

<!-- set the priority to debug for these two values to see nice debugging output -->
<category name="java.sql">
<priority value="error" />
</category>
<category name="com.ibatis">
<priority value="error" />
</category>

<root>
<priority value ="error" />
<appender-ref ref="STDOUT" />
</root>

</log4j:configuration>
141 changes: 141 additions & 0 deletions src/test/java/com/example/mybatis/AppTest.java
@@ -0,0 +1,141 @@
package com.example.mybatis;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class AppTest {

@BeforeClass
static public void testApp() {
App.init();

assertNotNull(App.factory);
}

SqlSession session = null;

@Before
public void setupSession() {
session = App.factory.openSession(); // This obtains a database connection!
}

@After
public void closeSession() {
session.commit(); // This commits the data to the database. Required even if auto-commit=true
session.close(); // This releases the connection
}

public TransactionToken tokenFactory(String tokenPrefix, String transactionPrefix)
{
TransactionToken t = new TransactionToken();
t.setToken(tokenPrefix + System.currentTimeMillis());
t.setTransaction(transactionPrefix + System.currentTimeMillis());
return t;
}

@Test
public void testInsert() {
TransactionTokenMapper mapper = session.getMapper(TransactionTokenMapper.class);

TransactionToken t = tokenFactory("alpha", "beta");
mapper.insert(t);
assertTrue(t.getId() > -1);

long count = mapper.count();

TransactionToken t2 = tokenFactory("cappa", "delta");
mapper.insert(t2);
assertTrue(t2.getId() > -1);

assertEquals(count + 1, mapper.count());
}

@Test
public void testUpdate() {
TransactionTokenMapper mapper = session.getMapper(TransactionTokenMapper.class);

TransactionToken t = tokenFactory("faraday", "gamma");
mapper.insert(t);

TransactionToken t2 = mapper.getById(t.getId());
assertEquals(t.getToken(), t2.getToken());
assertEquals(t.getTransaction(), t2.getTransaction());

t2.setToken("bingo" + System.currentTimeMillis());
t2.setTransaction("funky" + System.currentTimeMillis());
mapper.update(t2);

TransactionToken t3 = mapper.getById(t.getId());
assertEquals(t2.getToken(), t3.getToken());
assertEquals(t2.getTransaction(), t3.getTransaction());
}

@Test
public void testDeleteById() {

TransactionTokenMapper mapper = session.getMapper(TransactionTokenMapper.class);

long count = mapper.count();

TransactionToken t = tokenFactory("indigo", "jakarta");
mapper.insert(t);
assertEquals(count + 1, mapper.count());

mapper.deleteById(t);
assertEquals(count, mapper.count());


}

@Test
public void testDeleteByTransaction() {
TransactionTokenMapper mapper = session.getMapper(TransactionTokenMapper.class);

long count = mapper.count();

TransactionToken t2 = tokenFactory("kava", "lambda");
mapper.insert(t2);
assertEquals(count + 1, mapper.count());

mapper.deleteByTransaction(t2);
assertEquals(count, mapper.count());
}

@Test
public void testFindByTransaction() {
TransactionTokenMapper mapper = session.getMapper(TransactionTokenMapper.class);

TransactionToken t = tokenFactory("manual", "nova");
mapper.insert(t);
assertTrue(t.getId() >= 0);

TransactionToken t2 = mapper.selectByTransaction(t.getTransaction());
assertEquals(t.getToken(), t2.getToken());
assertEquals(t.getTransaction(), t2.getTransaction());
}

@Test
public void testRollback() {
TransactionTokenMapper mapper = session.getMapper(TransactionTokenMapper.class);

long count = mapper.count();

TransactionToken t = tokenFactory("omega", "passport");
mapper.insert(t);
assertEquals(count + 1, mapper.count());

session.rollback();
assertEquals(count, mapper.count());

TransactionToken t3 = tokenFactory("quark", "star");
mapper.insert(t3);
assertEquals(count + 1, mapper.count());
}
}

0 comments on commit 6a18d67

Please sign in to comment.